2

Gfh_i18n複合キー ( @IdClass)を持つエンティティがあります。

@Entity @IdClass(es.caib.gesma.petcom.data.entity.id.Gfh_i18n_id.class)
public class Gfh_i18n implements Serializable {

  @Id @Column(length=10, nullable = false)
  private String localeId = null;

  @Id <-- This is the attribute causing issues
  private Gfh gfh = null;
  ....
}

そしてidクラス

public class Gfh_i18n_id implements Serializable {
  private String localeId = null;
  private Gfh gfh = null;
  ...
}

これが書かれているように、これは機能します。問題は、次の関係をGfh持つクラスもあるということです:@OneToManyGfh_i18n

@OneToMany(mappedBy="gfh")
@MapKey(name="localeId")
private Map<String, Gfh_i18n> descriptions = null;

Eclipse Dali を使用すると、次のエラーが表示されます。

 In attribute 'descriptions', the "mapped by" attribute 'gfh' has an invalid mapping type for this relationship.

私がやろうとすると、Gfh_1i8n

@Id @ManyToOne
private Gfh gfh = null;

それは前のエラーを解決しますが、次のGfh_i18nように述べています

The attribute matching the ID class attribute gfh does not have the correct type es.caib.gesma.petcom.data.entity.Gfh

この質問は私のものと似ていますが、なぜ使用する必要があるのか​​ (または を使用する@EmbeddedId方法があるかどうか) を完全には理解していません。@IdClass@ManyToOne

Hibernate(JBoss 6.1)でJPA 2.0を使用しています

何か案は?前もって感謝します。

4

1 に答える 1

7

「派生 ID」を扱っています (JPA 2.0 仕様のセクション 2.4.1 で説明されています)。

IDクラスを変更して、「子」エンティティの「親」エンティティフィールドに対応するフィールド(あなたの場合gfh)が「親」エンティティの単一@Idフィールド(例String)に対応するタイプを持つようにする必要があります。 「親」エンティティはIdClassIdClass(例: Gfh_id) を使用します。

では、次のようGfh_1i8nに宣言する必要があります。gfh

@Id @ManyToOne
private Gfh gfh = null;

type のフィールドGFHが 1 つあると仮定すると、ID クラスは次のようになります。@IdString

public class Gfh_i18n_id implements Serializable {
  private String localeId = null;
  private String gfh = null;
  ...
}
于 2012-12-05T00:31:57.773 に答える