JPA에서 다소 복잡한 매핑을 구현하려고합니다. 이 예제와 비슷한 것이 필요합니다. 여러 종류의 작가와 여러 종류의 글쓰기가 있습니다. 각 글에는 지속 가능한 작성자 필드가 있어야합니다. 저자의 동적 유형은 중요하지 않습니다. 이것이 정적 추상 유형으로 설정 한 이유입니다. 그러나 Authro는 소설과 시가 각각 작성한 두 개의 목록을 가지고 있어야합니다.JPA 다형 관계, 정적 및 동적 입력
MappedSuperClass를 지속 가능한 필드의 대상으로 사용할 수 없다는 오류가 나타납니다. 누구든지 내가 성취하려는 것을 성취하는 방법을 알고 있습니까?
필자도이 양방향 관계를 소유하고 싶습니다. 그래서에 의해지도는 소설이나시 측면에 있어야합니다. 그러나 매핑 된 것만이 OneToMany면에만있을 수 있습니다 ... 한 가지가 많은 것을 소유하고있는 이상한 경우처럼 보이지 않습니다 ... 왜이 일을 할 수 없는지 ...
고맙습니다. 많은 도움이
@MappedSuperclass
@Access(AccessType.PROPERTY)
public abstract class AbstractWriter implements Serializable{
private Long id;
private String name;
private String email;
private ArrayList<Novel> novels;
private ArrayList<Poem> poems;
@OneToMany(mappedBy="author")
public ArrayList<Novel> getNovels() {
return novels;
}
public void setNovels(ArrayList<Novel> novels) {
this.novels = novels;
}
@OneToMany(mappedBy="author")
public ArrayList<Poems> getPoems() {
return poems;
}
public void setPoems(ArrayList<Poem> poems) {
this.poems = poems;
}
@Column(nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Id @GeneratedValue(strategy= GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
@Entity
public class ProfessionalWriter extends AbstractWriter {
}
@Entity
public class StudentWriter extends AbstractWriter {
}
@MappedSuperclass
public abstract class AbstractWriting implements Serializable{
private Long id;
private String title;
private AbstractWriter author;
private byte[] words;
@ManyToOne
public AbstractWriter getAuthor() {
return author;
}
public void setAuthor(AbstractWriter author) {
this.author = author;
}
@Id @GeneratedValue(strategy= GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Lob
public byte[] getWords() {
return words;
}
public void setWords(byte[] words) {
this.words = words;
}
@Column(nullable=false)
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
@Entity
public class Novel extends AbstractWriting {
}
@Entity
public class Poem extends AbstractWriting {
}
답변 해 주셔서 감사합니다. 나는이 변화를 만들 것이다. 구현보다는 인터페이스로 프로그래밍하는 방법을 제안 할 수 있습니까? 나는 당신이 의미하는 바를 아주 잘 이해하고 있다고 생각하지 않습니다. – b3bop
구체적 유형 (예 : ArrayList, HashMap)보다는 인터페이스 유형 (예 : List, Map)을 항상 사용하는 것이 좋습니다. 이 방법으로 마음이 바뀌어 ArrayList가 아닌 LinkedList (또는 TreeMap)를 사용하려는 경우 목록의 인스턴스화와 같은 코드를 한 곳에서 변경하면됩니다. 나머지 코드는 ArrayList인지 LinkedList인지 상관하지 않아야합니다. 그것이 알아야 할 것은리스트라는 것입니다. JPA에서는 이것이 매우 중요합니다. 이는 EclipseLink가 List를 구현하는 EclipseLinkLazyList와 같이 사용자의 목록을 효과적으로 대체하기 때문입니다. –
매우 통찰력있는. 매우 감사합니다. – b3bop