hibernate列名称问题
@Column(name="DateOfBirth") private Date dateOfBirth;
我特别需要上面的代码来创建一个名为“DateOfBirth”的列,而不是Hibernate给我一个名为date_of_birth的列。 我怎么能改变这个? 有web.xml属性吗? 我遇到了DefaultNamingStrategy和ImprovedNamingStrategy,但不知道如何指定其中一个。
下面是一个可能的解决方法:如果将其命名为dateofbirth
,则DB中的列将被命名为,但属性名称应该相同。
Hibernate采用驼峰大小写格式来创建/读取数据库列。
我以前遇到过这个问题。 我使用了遗留列,其中列名称“employeename”,“employeerole”,“departmentlocation”中没有空格。 我讨厌它,因为我所有的bean属性都必须没有驼峰的情况。
由“_”分隔的数据库列将用于正确的camelCase,如您所见。
仅供参考:插入下划线的原因可能是因为您正在使用ImprovedNamingStrategy 。 它在Configuration对象上设置 。 在这里看一个例子……
如果您不想使用下划线,则可以不设置命名策略,或将其设置为之前发现的DefaultNamingStrategy。
试着把它放进去
application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
将@Column注释放在getter上:
@Column(name="DateOfBirth") public Date getDateOfBirth() { ... }
ImprovedNamingStrategy具有从tableName()和columnName()调用的方法addUnderscores(),您可以实现自己的命名策略类并根据您的选择覆盖它们
public class MyOwnNamingStrategy extends ImprovedNamingStrategy { @Override public String tableName(String tableName) { //return addUnderscores(columnName); // skip this return columnName; // if you want column name variable name same //return changeAsYouWant(columnName); // as name sames } }
建议的解决方法是使用@Column(name =“dateofbirth”),它适用于我的目的。
在弹簧靴的情况下添加以下属性。
spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
你可以注释字段或getter方法,它没有什么区别。 你可以发布完整的hibernate.cfg.xml或persistence.xml文件吗?
我不是100%肯定,但是你不需要注释get方法而不是私有变量吗?
- Hibernate-懒得初始化一个角色集合:beans.Language.patients,无法初始化代理 – 没有Session
- 如何使用hibernate透明地连接到不同的数据库(开发/测试/生产)
- JPA:如何在运行时指定与类对应的表名?
- JPA / Hibernate双向多对一导致StackOverflowException
- 创建自定义Hibernate UserType – isMutable()是什么意思?
- 在Hibernate Restrictions条件查询中组合2个或更多属性
- 控制Hibernate EnumType.STRING属性的排序顺序
- JPA / hibernate大集合
- 如何在JPA中构造插入查询