everyone。私は休止状態には新しく、オブジェクトの永続性に予期せぬ問題を抱えています。hibernate not-nullプロパティはnullまたは一時的な値を参照します
TAnalysis.java
public class TAnalysis implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer unAnalysis;
@JoinColumn(name = "uninttest", referencedColumnName = "un_inttest", nullable = false)
@ManyToOne(fetch = FetchType.EAGER, optional = false, cascade = CascadeType.ALL)
private TIntTest tIntTest;
@OneToOne(optional = false, mappedBy = "tAnalysis", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private TBaseComp tBaseComp;
@OneToOne(optional = false, mappedBy = "tAnalysis", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private TWellTest tWellTest;
@OneToOne(optional = false, mappedBy = "tAnalysis", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private TGasPart tGasPart;
@OneToOne(optional = false, mappedBy = "tAnalysis", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private TAddOnComp tAddOnComp;
}
TIntTest.java
public class TIntTest implements Serializable, ISimpleEntity {
@Id
@GeneratedValue (strategy = GenerationType.SEQUENCE)
@Column (name = "un_inttest", nullable = false)
private Integer unInttest;
@OneToMany (cascade = CascadeType.ALL, mappedBy = "tIntTest")
private Set<TAnalysis> tAnalysisSet;
}
TBaseComp.java
public class TBaseComp implements Serializable {
@Id
@Column(name = "un_analysis", nullable = false)
private Integer unAnalysis;
@MapsId
@JoinColumn(name = "un_analysis", referencedColumnName = "un_analysis", nullable = false, insertable = false, updatable = false)
@OneToOne(optional = false, fetch = FetchType.EAGER)
private TAnalysis tAnalysis;
}
:ここに は私のエンティティクラスからの関連抽出物でありますの
他のクラス(TAddOnComp、TGasPartとTWellTest)はTAnalysis( "サブクラス" の一種)と[@OneToOne]関係TBaseCompと同じ構造を共有しています。
リストされた関係はすべてnullでなくてはなりません。だから私は新しいTAnalysisインスタンスを維持するときにはTIntTestオブジェクトを指定し、 "サブクラス"インスタンスを作成する必要があります。それは私がそれを行う方法は次のとおりです。
EntityManager em = emf.createEntityManager();
TAnalysis an = new TAnalysis();
TBaseComp baseComp = new TBaseComp();
TGasPart gasPart = new TGasPart();
TAddOnComp addInComp = new TAddOnComp();
TWellTest wellTest = new TWellTest();
an.setTBaseComp(baseComp);
an.setTGasPart(gasPart);
an.setTAddOnComp(addInComp);
an.setTWellTest(wellTest);
baseComp.setTAnalysis(an);
gasPart.setTAnalysis(an);
addInComp.setTAnalysis(an);
wellTest.setTAnalysis(an);
TIntTest intTest = em.find(TIntTest.class, 10);
an.setTIntTest(intTest);
an = em.merge(an);
//baseComp = em.merge(baseComp);
//gasPart = em.merge(gasPart);
//addOnComp = em.merge(addOnComp);
//wellTest = em.merge(wellTest);
//em.persist(an);
em.getTransaction().commit();
マージ操作は、私がrequeredプロパティ値an.setTIntTest(intTest)
を指定するので、これはなぜ起こるか私は理解できない例外
org.hibernate.PropertyValueException: not-null property references a null or transient value : org.foladesoft.omnibus_client_maven.entities.TAnalysis.tIntTest"
をスローします。私はem.persist(an)
代わりにマージを使用しますがで別の例外を持って私の問題を解決しようとすると
はフェーズコミット:PostgreSQLの外部キー違反の例外は、私は新しいレコードを挿入する前TAddOnCompにレコードを挿入しようとしていることを教えてくれましたTAnalysisに。
私はこれらの問題に遭遇した理由と、自分のアプリケーションを動作させる方法を教えてください。これは新しいエンティティあなたが呼び出すべきであるであるよう
。また、Hibernateにparamsを含む更新クエリを記録させます。 – Kirinya