質問

私たちは、基本的な@OneToMany関係を使用しようとしています

@Entity
@Table(name = "PARENT_MESSAGE")
public class ParentMessage {

 @Id
 @Column(name = "PARENT_ID")
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Integer parentId;

 @OneToMany(mappedBy="parentMsg",fetch=FetchType.LAZY)
 private List childMessages;

 public List getChildMessages() {
  return this.childMessages;
 }
 ...
}

@Entity
@Table(name = "CHILD_MSG_USER_MAP")
public class ChildMessage {

 @Id
 @Column(name = "CHILD_ID")
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Integer childId;

 @ManyToOne(optional=false,targetEntity=ParentMessage.class,cascade={CascadeType.REFRESH}, fetch=FetchType.LAZY)
 @JoinColumn(name="PARENT_ID")
 private ParentMessage parentMsg;

 public ParentMessage getParentMsg() {
  return parentMsg;
 }
 ...
}
   ChildMessage child = new ChildMessage();
   em.getTransaction().begin();
   ParentMessage parentMessage = (ParentMessage) em.find(ParentMessage.class, parentId);
   child.setParentMsg(parentMessage);
   List list = parentMessage.getChildMessages();
   if(list == null) list = new ArrayList<ChildMessage>();
   list.add(child);
   em.getTransaction().commit();

私たちは、次のエラーメッセージが表示されます。なぜ、OpenJPAがAPP.PARENT_MESSAGE_CHILD_MSG_USER_MAPするテーブル名を連結していますか?もちろん、そのテーブルが存在しない...定義されたテーブルがAPP.PARENT_MESSAGEAPP.CHILD_MSG_USER_MAPです。

  

に起因します:   org.apache.openjpa.lib.jdbc.ReportingSQLException:   テーブル/ビュー   'APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP'   存在しない。 {SELECT t1.CHILD_ID、   t1.PARENT_ID、t1.CREATED_TIME、   FROM t1.USER_ID   APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP   T0 INNER JOINは   ON APP.CHILD_MSG_USER_MAPさt1   t0.CHILDMESSAGES_CHILD_ID =   t1.CHILD_ID WHERE   t0.PARENTMESSAGE_PARENT_ID =?}   【コード= 30000、状態= 42X05]

役に立ちましたか?

解決

あなたは関係の所有側にmappedBy属性を追加することもできます。これは、一つだけrelatiuonshipはなく二つの異なる関係であることをJPAに伝えます。たぶん、多くの側ます。

他のヒント

あなたは関係をうまくする方法をJPAに伝えるために、あなたのエンティティの関係上だけでなく@JoinColumn、おそらく@JoinColumns注釈を使用する必要があると思います。あなたは、エンティティで同じ名前を持つ2つの書き込み可能なフィールドを持つことはできませんので、あなたがinsertable=false, updatable=falseなどのエンティティ内に既に存在しているこれらのフィールドを指定する必要があります注意します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top