JPA 2.1에 엔티티를 저장하려고합니다. MVCollection, MVCollectionVersion (MVCollection 버전) 및 MVBelongsCollection (버전에 속하는 항목)의 세 테이블이 있습니다. MVCollection의 기본 키는 생성 된 시퀀스 번호입니다. 버전이있는 항목을 제외한 모음을 생성 할 때 @MapsId를 사용하고 생성 된 ID가 하위 항목 내에서 사용됩니다. 그러나 나는이 항목을 어떻게 복제 할 수 있는지 이해할 수 없다.JPA 그랜드 자식을위한 JPA Hibernate MapsId
여기에 지금까지의 코드에서 조각입니다
@Entity
public class MVCollection {
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MVCOLLECTION_SEQ")
@SequenceGenerator(name = "MVCOLLECTION_SEQ",
sequenceName = "VMD.MVCOLLECTION_SEQ")
@Id
@Column(name = "MVCOLLECTIONID")
private Long id;
MVCollectionVersion
@Entity
public class MVCollectionVersion {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "versionId", column = @Column(name = "MVCVSNID")) })
private MVCollectionVersionId id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "MVCOLLECTIONID", referencedColumnName = "MVCOLLECTIONID"),
})
@MapsId("mvCollectionId")
private MVCollection mvCollection;
@OneToMany(fetch = FetchType.LAZY, mappedBy="mvCollectionVersion", cascade={CascadeType.MERGE, CascadeType.PERSIST})
private List<MVBelongsCollection> mvCollectionItems;
MVCollectionId
@Embeddable
public class MVCollectionVersionId implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 2551937096790427792L;
private Long mvCollectionId;
private Integer versionId;
MVBelongsCollection
@Entity
public class MVCollectionItems
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "managedViewId", column = @Column(name = "MANAGEDVIEWID")),
@AttributeOverride(name = "mvCollectionId", column = @Column(name = "MVCOLLECTIONID")),
@AttributeOverride(name = "versionId", column = @Column(name = "MVCVSNID")) })
private MVBelongsCollectionId id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "MVCOLLECTIONID", referencedColumnName = "MVCOLLECTIONID"),
@JoinColumn(name = "MVCVSNID", referencedColumnName = "MVCVSNID") })
private MVCollectionVersion mvCollectionVersion;
(에 NULL을 삽입 할 수 없습니다 : 그것은 mvCollectionId 필드가 null "ORA-01400 인 상태로
@Embeddable
public class MVBelongsCollectionId implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Column (name = "MANAGEDVIEWID", nullable = false, precision = 38)
private Long managedViewId;
@Column (name = "MVCOLLECTIONID", nullable = false, precision = 38)
private Long mvCollectionId;
@Column (name = "MVCVSNID", nullable = false, precision = 38)
private Integer versionId;
나는 버전과 belongsCollection의 항목 컬렉션을 만들려고하면
이 (가) 작성마지막 MVBelongsCollectionId 실패 "VMD". "MVBELONGSCOLLECTION". "MVCOLLECTIONID") " 따라서 MVCollectionVersion으로 수행 한 것처럼 @MapsId를 추가하려고했습니다. org.hibernate.MappingException : 그러나 Eclipse에서
public class MVBelongsCollection {
/**
* primary key
*/
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "managedViewId", column = @Column(name = "MANAGEDVIEWID")),
//@AttributeOverride(name = "mvCollectionId", column = @Column(name = "MVCOLLECTIONID")),
@AttributeOverride(name = "versionId", column = @Column(name = "MVCVSNID")) })
private MVBelongsCollectionId id;
/**
* collection that this joins to.
*/
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("mvCollectionId")
@JoinColumns({
@JoinColumn(name = "MVCOLLECTIONID", referencedColumnName = "MVCOLLECTIONID"),
@JoinColumn(name = "MVCVSNID", referencedColumnName = "MVCVSNID") })
private MVCollectionVersion mvCollectionVersion;
이 나는 과정을 시작하면, 나는에 의한 을 얻을
The type of the ID mapped by the relationship 'mvCollectionVersion' does not agree with the primary key class of the target entity.
의 @ManyToOne 주석에 오류가 표시 매핑 반복 열을 엔티티에 대한 : MVBelongsCollection 열 : MVCVSNID
내 @JoinColumn, @AttributeOVerride 및 근본적인 위치에 insertable = false 및 updatable = false를 추가하려고했습니다. ID 클래스이지만 st 병이 같은 오류가 발생합니다. @MapsId가있는 경우에만 발생합니다.
MVBolongsCollection에서 생성 된 MVCollectionId를 사용하는 방법이 손실되었거나 Eclipse와 런타임 오류를 모두 멈출 수있는 방법을 알고 있습니다.
누구든지 도와 주시면 감사하겠습니다. 나는 내 방식의 오류를 발견 사전