1

多対 1 の関係で依存関係として別のエンティティに永続化されるエンティティがあります。永続化されるエンティティのインスタンスを構築するとき、依存エンティティは常に EntityManager からロードされます。ただし、エンティティを永続化しようとすると、Hibernate は依存関係にも挿入を試み、エラーが発生します。なぜこれが起こっているのか、どうすれば無効にできるのか教えてもらえますか?

エンティティは次のように定義されます。

@Entity
@Table(name="postal_code")
public class PostalCode implements Serializable {
    private static final long serialVersionUID = 1L;

    @EmbeddedId
    PostalCodePK id;

    @MapsId("country")
    @ManyToOne
    @JoinColumn(name="country")
    private Country country;

    public PostalCode(Country country, String code) {
        ...
    }

    ...
}

従属エンティティ Country は次のように定義されます。

@Entity
public class Country implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="code_alpha2", columnDefinition="bpchar")
    @Size(min=2, max=2)
    private String codeAlpha2;

    ...
}

エンティティの構築と永続化に関連するコードは次のとおりです。

PostalCode postalCode = new PostalCode(em.find(Country.class, "DE"), "01234");
em.getTransaction().begin();
em.persist(postalCode);
em.flush();
em.getTransaction().commit();

PostalCode のインスタンスで persist を呼び出したときのログ出力は次のとおりです。

Hibernate: 
    insert 
    into
        Country
        (code_alpha3, code_alpha2) 
    values
        (?, ?)
Aug 05, 2013 11:40:59 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 23505
Aug 05, 2013 11:40:59 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ERROR: duplicate key value violates unique constraint "country_pkey"
  Detail: Key (code_alpha2)=(DE) already exists.

前もって感謝します!

4

1 に答える 1