0

スレッド休止状態の問題があります。2 つの都市オブジェクトを含むトラックとの ManyToOne 関係があります。スレッドを通じて、私の trackDao が多くの trackEntity を取得して、同じ都市 (郵便番号は一意) を含めることができます。

trackDao が最初のエンティティを永続化した後、「重複エンティティ例外」が発生します。

get bevore save を強制して既存の childId を取得し、親の永続化を再開するように注釈を介して構成することは可能ですか?

どうも


お時間いただきありがとうございます。

都市を保存して、データベースから既存の都市 (同じ郵便番号を持つ) を取得しようとする前に、手動で取得しようとしました。

現在、旅行には 2 つの都市が含まれています。1 つのシティ ウィッチは既にデータベースに格納されており (objectId != null)、別のシティ ウィッチは永続化する必要があります (objectId == null)

hibernate は city1 が既に永続化されていることを知る必要がありますが、city2 のみが city-table に永続化される必要がありますが、「重複エンティティ例外」が発生します。Hibernate は既存の都市を再び保存します。tripDao の一般的な save メソッドをオーバーライドし、都市の持続マニュアルを処理することをお勧めします。-> city.getId() == null の場合は都市を保存します。したがって、保存されていない旅行オブジェクトの魔女には、既に保存されている2つの都市が含まれています。その旅行オブジェクトを永続化しようとすると、休止状態のメッセージが表示されます

「trackjavax.persistence.PersistenceException の永続化中にエラーが発生しました: org.hibernate.PersistentObjectException: 永続化に渡された切り離されたエンティティ: de....CityEntity」

私は何かが完全に間違って設定されていたと信じています。

助けてください。

私は save メソッドをオーバーライドして手動で実体を保存したくありません。私の意見では、デフォルトで動作する必要がありますか?

@Entity
@Table(name = "tracks", uniqueConstraints = @UniqueConstraint(columnNames = { "city1_id", "city2_id" }))
@SessionScoped
public class TrackEntity extends BaseEntity {
    private static final long serialVersionUID = 4696847902782174082L;

    @ManyToOne(targetEntity = CityEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.PERSIST, optional=false)
    @JoinColumn(name="city1_id")
    private CityEntity city1;

    @ManyToOne(targetEntity = CityEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.PERSIST, optional=false)
    @JoinColumn(name="city2_id", referencedColumnName="id")
    private CityEntity city2;

    private Integer distance;





@Entity
@Table(name = "cities")
@SessionScoped
public class CityEntity extends BaseEntity {
    private static final long serialVersionUID = 8823384603378561475L;

    private String name;
    @Column(unique=true)
    private String zipcode;
    private String latitude;
    private String longitude;
4

1 に答える 1

0

トラックには同じ都市が 2 つあると思います。Order ->* Product にも同じ問題がありました。しかし、これは注文が重複した製品を持つことができないというアプリケーションのバグでした。あなたのケースで何が許可されているのかわかりませんが、 City クラスを調査して equals メソッドを探すことをお勧めします。都市を保持するために Track クラスに java.util.List がある場合、そのリストには同じオブジェクト (==) の 2 つの要素がある可能性があります。

于 2013-10-19T07:56:29.797 に答える