2

JPA(Hibernate実装)を使用してエンティティをテーブルにマップしようとしているときに、混乱するものが見つかりました

ゲッターでアノテーションを使用すると、問題ありません

@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>

今は動作していますが、何がこの問題を引き起こしているのか知りたいのですが、ありがとうございます

4

1 に答える 1

0

ここで簡単な説明を見つけることができます:
Hibernateアノテーション配置質問

ポイントは次のとおりです:
「Hibernateによって使用されるアクセスタイプはフィールドまたはプロパティになります。EJB3仕様では、アクセスされる要素タイプ、つまりgetterメソッドでアノテーションを宣言する必要があります。プロパティアクセスを使用する場合、フィールドアクセスを使用する場合はフィールド。フィールドとメソッドの両方でEJB3アノテーションを混在させることは避けてください。Hibernateはアクセスタイプを推測します...」

于 2012-10-15T08:02:04.733 に答える