私はOneToMany-Relationを介して互いに関係する2つのエンティティを持っています。VARCHARSがCLOBに変わったとき、JPA永続化は関係では発生しません
エンティティ1は、「変更」と命名し、以下の
public class Change {
String attribute1;
@Column(name="\"ATTRIBUTE1\"")
public void getAttribute1() {
return this.attribute1;
}
public void setAttribute1(String attribute1) {
this.attribute1 = attribute1;
}
// and 7 more of these....
List<ChangeTask> relatedChangeTasks = new ArrayList<ChangeTask>();
@OneToMany(cascade={PERSIST, MERGE, REFRESH}
@JoinTable(name="CHANGE_CHANGETASK", joinColumns={@JoinColumn(name="CHANGE_ID")}, inverseJoinColumns={@JoinColumn(name="CHANGETASK_ID")})
@JoinColumn(name="\"relatedChangeTask_ID\"")
public List<ChangeTask> getRelatedChangeTasks() {
return this.relatedChangeTasks;
}
public void setRelatedChangeTasks(List<ChangeTask> relatedChangeTasks) {
this.relatedChangeTasks = relatedChangeTasks;
}
}
エンティティ2のように見えているChangeTask命名し、変更を拡張しています。
public class ChangeTask extends Change {
// some additional attributes...
}
「relatedChangeTask」リストに1つのChangeTaskを追加して、新しいまたは既存の変更レコードを永続化すると、完璧に機能します。
今、変更は次のようになりますので、私は、デフォルトから@Lobの8つの属性の注釈を変更する必要があります。
今public class Change {
String attribute1;
@Lob
@Column(name="\"ATTRIBUTE1\"")
@Basic(fetch=EAGER)
public String getAttribute1() {
if(fieldHandler != null) {
return (java.lang.String) fieldHandler.readObject(this, "attribute1", attribute1);
}
return attribute1;
}
public void setAttribute1(String attribute1) {
if(fieldHandler != null) {
this.attribute1= (java.lang.String) fieldHandler.writeObject(this, "attribute1", this.attribute1, attribute1);
return;
}
this.attribute1= attribute1;
}
// and 7 more of these....
List<ChangeTask> relatedChangeTasks = new ArrayList<ChangeTask>();
@OneToMany(cascade={PERSIST, MERGE, REFRESH}
@JoinTable(name="CHANGE_CHANGETASK", joinColumns={@JoinColumn(name="CHANGE_ID")}, inverseJoinColumns={@JoinColumn(name="CHANGETASK_ID")})
@JoinColumn(name="\"relatedChangeTask_ID\"")
public List<ChangeTask> getRelatedChangeTasks() {
return this.relatedChangeTasks;
}
public void setRelatedChangeTasks(List<ChangeTask> relatedChangeTasks) {
this.relatedChangeTasks = relatedChangeTasks;
}
}
、私は変更に与えられたChangeTaskを追加しようとすると、インクルードが持続操作は失敗しません。しかし、トランザクションの終わりには、関係は保持されておらず、関係表「CHANGE_CHANGETASK」は空のままであることを意味する。全体のプロセスをデバッグすると、リストには「entityManager.merge()」操作の前に1つのエントリが含まれており、マージ後にまだ1つのエントリが含まれていることがわかります。しかし、決してデータベースには到着しません。
誰も私がここで間違っているアイデアはありますか?聞こえるかもしれない奇妙なことに、それは@Lobアノテーションに関連したものでなければなりません。エンティティからそれらをもう一度削除するとすぐにすべてがうまく動作します。
ありがとうございます。
あなたはそうです。ちょっとばかげたコピー貼り付けエラー。コードがコンパイルされます。そのために残念。 –