부모/자식 @onetomany에 대한 JPA 테이블 이름을 연결합니다

StackOverflow https://stackoverflow.com/questions/2465743

  •  20-09-2019
  •  | 
  •  

문제

우리는 기본 @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_MESSAGE 그리고 APP.CHILD_MSG_USER_MAP

원인 : org.apache.openjpa.lib.jdbc.reportingsqlexception : table/view 'app.parent_message_child_msg_user_map'은 존재하지 않습니다. {t1.child_id, t1.parent_id, t1.created_time, t1.user_id from app.parent_message_child_msg_user_map t0 내부 조인 app.child_msg_user_map t1 on t0.childmessages_child_id = t1.child_id where where where where where where where where where where where where where where where where where where where where where and child_msg_user_map t1 42x05

도움이 되었습니까?

해결책

관계의 소유 측면에 mappedby 속성을 추가 할 수 있습니다. 이것은 JPA에게 하나의 친척 일 뿐이며 두 가지 다른 관계가 아니라는 것을 알려줍니다. 어쩌면 많은면에서.

다른 팁

당신은 그것을 사용해야합니다 @JoinColumn 그리고 아마도 @JoinColumns JPA에 관계를 해결하는 방법을 알려주는 엔티티 관계에 대한 주석. 참고 엔티티에 이미 존재하는 필드를 지정해야합니다. insertable=false, updatable=false 엔티티에서 동일한 이름을 가진 두 개의 쓰기 가능한 필드를 가질 수 없기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top