Ответ 1
Как описано в spring-boot-jpa-column-name-annotation-ignored, ваше имя столбца преобразуется в случай змейки.
Возможные решения:
- Настройка стратегии именования
- Используйте имена нижних регистров в ваших аннотациях
Я использую JPA для доступа к базе данных и аннотировал каждый столбец с правильным именем. Теперь, если я выполняю запрос (например, findAll()), он возвращает
Unknown column 'program0_.program_id' in 'field list'
Правильное сообщение об ошибке program_id
неизвестно, поскольку настоящее имя programId
.
Модели: программа
@Entity
@Table(name = "programs")
@XmlRootElement
public class Program implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "programId")
private Long programId;
@ManyToMany
@JoinTable(
name = "programlabels",
joinColumns = {
@JoinColumn(name = "program", referencedColumnName = "programId")},
inverseJoinColumns = {
@JoinColumn(name = "label", referencedColumnName = "labelId")})
private Collection<Label> labels;
}
Метка
@Entity
@Table(name = "labels")
@XmlRootElement
public class Label implements Serializable {
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(name = "labelId")
private String labelId;
}
Query
select program0_.program_id as program_1_5_, ...
Есть ли причина, по которой JPA меняет "programId" на "program_id", или мне не хватает какой-либо конфигурации?
спасибо
Изменить: О, извините, забыл добавить код запроса/информацию.
Я использую интерфейс Spring Data JpaRepository и пробовал запрос findAll().
@Repository
public interface ProgramRepository extends JpaRepository<Program, Long> {}
Как описано в spring-boot-jpa-column-name-annotation-ignored, ваше имя столбца преобразуется в случай змейки.
Возможные решения:
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
spring.jpa.hibernate.naming.strategy не поддерживается для реализации Spring JPA с использованием Hibernate 5.
Используйте свойство ниже в application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
@Column (name = "PersonFullName")
private String PersonFullName;
имя столбца таблицы базы данных " PersonFullName " без подчеркивания.
Ниже работал для меня. Добавьте это в настройках приложения и затем используйте @Column, чтобы указать имя столбца физической базы данных для свойства модели.
@Column (name = "PersonFullName")
В приложении. Свойства
spring.jpa.hibernate.naming.implicit-Strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-стратегии = org.hibernate.boot.model.naming.PhysicalNardStrategyStand