当我尝试使用JPA(Hibernate实现)将实体映射到表时,我发现了令人困惑的内容
当我在getter上使用注释时,一切正常
@Column(name = "main_battery_voltage", precision = 2)
public float getMainBatteryVoltage() {
return mainBatteryVoltage;
}
但是当我在字段上尝试相同的事情时,使用字段名称和属性
@Column(name = "main_battery_voltage", precision = 2)
private float mainBatteryVoltage;
系统忽略名称属性,在DB中以列名mainBatteryVoltage运行,因此任务失败。
我正在使用MySQL,这是persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="SolarPersistenceUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.cs.solar.db.entity.User</class>
<class>com.cs.solar.db.entity.Lamp</class>
<class>com.cs.solar.db.entity.Project</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<!--<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>-->
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/SOLAR"/>
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="admin" />
<property name="hibernate.connection.autocommit" value="false"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.max_fetch_depth" value="3"/>
</properties>
</persistence-unit>
<persistence-unit name="TestSolar" />
</persistence>
虽然它现在有效,但我很好奇是什么导致了这个问题,谢谢
答案 0 :(得分:0)
你可以在这里找到一个简短的解释:
Hibernate Annotation Placement Question
重点是:
“Hibernate使用的访问类型将是字段或属性.EJB3规范要求您在将要访问的元素类型上声明注释,即如果使用属性访问则 getter方法,如果使用字段访问,则为字段。应避免在两个字段和方法中混合使用EJB3注释。 Hibernate将猜测访问类型 ......“