0

Stackoverflowを検索すると、多くの人が同じ問題を抱えていることがわかりましたが、他の投稿を見て解決策を見つけることができません。それで:

Hibernateクラスを永続化しようとしていますが、エンティティオブジェクトを使用していません。代わりに、マップを使用しています。

これは私の地図です:

Map<String, Object> record;
record = new HashMap<String, Object>();

...

record.put("key1", "value");
record.put("key2", "value");
record.put("field1", "value");
record.put("field2", "value");
record.put("field3", "value");
record.put("field4", "value");
record.put("field5", "value");
record.put("field6", value);
record.put("field7", value);

これはhbm.xmlです

<class entity-name="entity_name" dynamic-update="true">
<composite-id name="Key1Key2" class="classname">
    <key-property name="Key1" column="Key1" type="string"/>
    <key-property name="Key2" column="Key2" type="string"/>
</composite-id>
    <property name="field1" column="field1" type="string"/>
    <property name="field2" column="field2" type="string"/>
    <property name="field3" column="field3" type="string"/>
    <property name="field4" column="field4" type="string"/>
    <property name="field5" column="field5" type="string"/>
    <property name="field6" column="field6" type="double"/>
    <property name="field7" column="field7" type="double"/>
</class>

レコードを永続化しようとすると:

super.session.persist("entity_name", record)

このエラーが返されます:

org.hibernate.id.IdentifierGenerationException:このクラスのIDは、save()を呼び出す前に手動で割り当てる必要があります

誰か助けてもらえますか?少し早いですがお礼を!

4

2 に答える 2

1

次のように複合 ID プロパティを変更して質問を解決しました。

<composite-id class="CompositeId" mapped="true">

( mapping="true"が解決の鍵です)

次に、ハッシュマップにキー プロパティ値を割り当てます。

于 2013-04-09T09:47:08.563 に答える
0

簡単な答え: クラスは POJO である必要があります。

長い答え: 複合 ID 用に別のクラスを作成する必要があります。

public final class CompositeId implements Serializable {
  private String first;
  private String second;

  // getters, setters, hashCode, equals
}

あなたの永続的なオブジェクトは

public class YourClass {
  private CompositeId id;
  private Map map;

  public YourClass() {
    this.map = new HashMap();
  }

  public void setId(CompositeId id) {
    this.id = id;
  }

  public CompositeId getId() {
    return id;
  }

  public void setField1(String field1) {
    this.map.put("field1", field1);
  }  

  public String getField1() {
    return map.get("field1");
  }  
  // and so forth
}

そして最後に、あなたの .hbm.xml:

<class entity-name="entity_name" dynamic-update="true">
<composite-id name="id" class="CompositeId">
    <key-property name="first" column="Key1" type="string"/>
    <key-property name="second" column="Key2" type="string"/>
</composite-id>
    <property name="field1" column="field1" type="string"/>
    <property name="field2" column="field2" type="string"/>
    <property name="field3" column="field3" type="string"/>
    <property name="field4" column="field4" type="string"/>
    <property name="field5" column="field5" type="string"/>
    <property name="field6" column="field6" type="double"/>
    <property name="field7" column="field7" type="double"/>
</class>
于 2012-10-31T15:12:38.367 に答える