我使用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;
}
查询
select program0_.program_id as program_1_5_, ...
为什么JPA会将“programId”更改为“program_id”或者我是否缺少任何配置?
感谢
编辑:哦抱歉忘了添加查询代码/信息。
我使用Spring Data的JpaRepository
界面并尝试findAll()
查询。
@Repository
public interface ProgramRepository extends JpaRepository<Program, Long> {}
答案 0 :(得分:16)
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
spring.jpa.hibernate.naming.strategy不是使用Hibernate 5进行Spring JPA实现的受支持属性。
在application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
答案 1 :(得分:13)
答案 2 :(得分:1)
@Column(name =“ PersonFullName”)
私有字符串PersonFullName;
到数据库表列名“ PersonFullName ”,不带下划线。
以下内容对我有用。将其添加到应用程序设置中,然后使用@Column指定模型属性的物理数据库列名称。
@Column(name =“ PersonFullName”)
在 Application.properties
中spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
答案 3 :(得分:1)
在application.properties中使用以下内容
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl