下划线不正确的 JPA 列
JPA column with incorrect underscore
我使用 JPA 进行数据库访问,并用正确的名称注释了每一列。现在,如果我执行查询(例如 findAll()
),它 returns
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" 是有原因的还是我缺少任何配置?
谢谢
编辑:哦抱歉忘记添加查询 code/information。
我使用 Spring 数据的 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
对于使用 Hibernate 5 的 Spring JPA 实现,spring.jpa.hibernate.naming.strategy 不受支持 属性。
在application.properties
中使用下面的属性
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
能够映射
@Column(名称="PersonFullName")
私有字符串 PersonFullName;
到数据库 table 列名“PersonFullName”,不带下划线。
以下对我有用。在应用程序设置中添加它,然后使用@Column 为模型的 属性.
指定物理数据库列名称
@Column(名称="PersonFullName")
在Application.properties
spring.jpa.hibernate.naming.implicit-策略=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-策略=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
在application.properties
下面使用
spring.jpa.hibernate.naming.physical-策略=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
我使用 JPA 进行数据库访问,并用正确的名称注释了每一列。现在,如果我执行查询(例如 findAll()
),它 returns
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" 是有原因的还是我缺少任何配置?
谢谢
编辑:哦抱歉忘记添加查询 code/information。
我使用 Spring 数据的 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
对于使用 Hibernate 5 的 Spring JPA 实现,spring.jpa.hibernate.naming.strategy 不受支持 属性。
在application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
能够映射
@Column(名称="PersonFullName")
私有字符串 PersonFullName;
到数据库 table 列名“PersonFullName”,不带下划线。
以下对我有用。在应用程序设置中添加它,然后使用@Column 为模型的 属性.
指定物理数据库列名称@Column(名称="PersonFullName")
在Application.properties
spring.jpa.hibernate.naming.implicit-策略=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-策略=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
在application.properties
下面使用spring.jpa.hibernate.naming.physical-策略=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl