2012-10-15 43 views
2

正如我试图实体映射到使用JPA表(Hibernate实现),我发现了一些令人困惑的name属性似乎并没有在现场工作

当我消气使用注释,事情都OK

@Column(name = "main_battery_voltage", precision = 2) 
public float getMainBatteryVoltage() { 
    return mainBatteryVoltage; 
} 

但是当我尝试现场同样的事情,现场的名字被用来与属性

@Column(name = "main_battery_voltage", precision = 2) 
private float mainBatteryVoltage; 

系统忽略name属性,在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

这是您使用? – rbento

+0

我使用Hibernate 4.0 – Korben

+0

删除的name属性Hibernate的版本,namings应采取的默认值,它是驼峰到camel_case强调。此外,请当然,字段访问类型是设置的。尝试这样做不是使用浮点数,而是使用字符串。 – JMelnik

回答

0

你可以在这里找到一个简短的说明:
Hibernate Annotation Placement Question

关键是:
“Hibernate使用的访问类型将是字段或属性,EJB3规范要求您声明重新注释将被访问的元素类型,即如果您使用属性访问的getter方法,则使用字段访问的字段。应该避免在这两个字段和方法中混合使用EJB3注释。 Hibernate会猜测访问类型 ...”