3

Hibernate XML マッピング構成で主キーのセッターを回避することは可能ですか? 注釈を使用する場合、setter メソッドを宣言する必要はありません。例を参照してください。Hibernate バージョン 4.1.2 を使用しています。

  1. XML ベースの構成

    public class Entity {
        private Integer id;
    
        public Integer getId() {
            return id;
        }
    }
    
    <class name="Language" table="language">
        <id name="id" column="id">
            <generator class="native" />
        </id>
    </class>
    

    Hibernate の初期化中に例外がスローされる

    Caused by: org.hibernate.PropertyNotFoundException: Could not find a setter for property id in class net.kreuzman.eshop.core.domain.l10n.Language
        at org.hibernate.property.BasicPropertyAccessor.createSetter(BasicPropertyAccessor.java:252)
        at org.hibernate.property.BasicPropertyAccessor.getSetter(BasicPropertyAccessor.java:245)
        at org.hibernate.mapping.Property.getSetter(Property.java:325)
        at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertySetter(PojoEntityTuplizer.java:444)
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:182)
        at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:82)
    ... 49 more
    
  2. 注釈ベースの構成

    @Entity
    @Table(name="entity")
    public class Entity {
        @Id
        @Column(name="id")
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Integer id;
    
            public Integer getId() {
                 return id;
            }
    }
    

これはうまくいきます。

4

3 に答える 3

4

アクセスタイプをフィールドに設定できます。これにより、フィールドに注釈を付けるのと同じことが実現します。

<class name="Language" table="language">
    <id name="id" column="id" access="field">
        <generator class="native" />
    </id>
</class>
于 2012-04-26T13:39:56.673 に答える
0
@GeneratedValue(strategy = GenerationType.IDENTITY)

オートの代わりに

于 2013-06-10T03:36:18.947 に答える
0

hibernate はリフレクション (Class.newInstance()) を介してオブジェクトを作成すると思います。これが、引数なしのコンストラクターが必要な理由です。そのように-使用済みプロパティのセッターを除外する方法がわかりません。U は未使用のフィールドを @Transient としてマークできますが、それだけです。

于 2012-04-26T13:34:22.363 に答える