다음은 해결책을 찾을 수없는 문제입니다. 불가능할 수도 있고, 전체적인 생각으로 잘못된 방향으로 가고 있습니다.이미 존재하는 데이터베이스에 JPA 상속을 도입했습니다.
처음에 내 JPA 계층 구조의 부분과 같이했다 : 어떤 객체의 사용자 정의 필드에 대한 필요가 발생 할 때까지
@MappedSuperclass
public abstract class AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
.....
}
@Audited
@Entity
@Table(name = "T_MEETING")
public class Meeting extends AbstractEntity implements Groupable {...}
@Audited
@Entity
@Table(name = "T_QUESTION")
public class Question extends AbstractEntity implements Groupable {...}
이 데이터베이스는 몇 시간 동안 사용되어왔다.
나는 길을 follwing을 가기로 결정 - 사용자 정의 필드를 가지는 객체에있는 추상적 인 실체 붙어 : 나는 다른 옵션을 시도했다
@Audited
@Entity
@Table(name = "T_CF_OBJECT")
@Inheritance(strategy = InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name = "ID", referencedColumnName = "CF_OBJECT_ID")
public abstract class EntityWithCustomFields extends AbstractEntity {...}
@Audited
@Entity
@Table(name = "T_QUESTION")
public class Question extends EntityWithCustomFields implements Groupable {...}
@Audited
@Entity
@Table(name = "T_MEETING")
public class Meeting extends EntityWithCustomFields implements Groupable {...}
와 문제는 항상있다 :
JPA 공급자 (내 경우 최대 절전 모드), 부모님이 먼저 삽입하므로
CF_OBJECT_ID
은null
최대 절전 모드 : 삽입 i (활성, 날짜, c_group, last_notification_date, only_for_members, place, questions_order, subject, update_date, id) 값 (?,?,?, ?,)에 t_meeting에 삽입하십시오. 나는 기본 엔티티에
@PrimaryKeyJoinColumn
주석을 생략하면?,?,?,?,?,?), 그 자손의
Id
및Id
의 조인 열과 무엇 리드로 사용에 서브 클래스 테이블입니다 같은 이드가 아니야. 처음에는 좋았지 만 두 테이블에 이미 많은 수의 레코드가 있으며id
열에 같은 값을 가지고 있습니다. 테이블에서id
을 변경하는 것은 옵션이 아닙니다.
내 경우에 상속을 사용하는 올바른 방법은 무엇일까? 가능한 한 원활하게 들어갈 수 있습니까? 내가 어떻게 hibernate가 먼저 서브 클래스 인스턴스를 유지하게하고 그 ID를 지속 된 수퍼 클래스에 전달 하는지를 알아 내면 좋을 것이다. 그게 주석이 될거야, 그렇지?
편집 : 제안에 관해서는 정말 다음과 같은 이유로 @MappedSuperClass
을 사용할 수 없습니다 @MappedSuperclass
를 사용합니다. 부모 클래스 EntityWithCustomFields
은 CustomFieldValue
클래스의 ManyToOne
관계를 참조하는 데 사용됩니다.
@Entity
@Audited
@Table(name = "T_CF_VALUES")
public class CustomFieldValue extends AbstractEntity {
@ManyToOne
@JoinColumn(name = "customFieldObject", nullable = false)
private EntityWithCustomFields customFieldObject;
....
}
@Audited
@Entity
@Table(name = "T_CF_OBJECT")
@Inheritance(strategy = InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name = "ID", referencedColumnName = "CF_OBJECT_ID")
public abstract class EntityWithCustomFields extends AbstractEntity {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "customFieldObject", cascade = CascadeType.ALL)
private List<CustomFieldValue> customFields;
....
}
나는 @MappedSuperclass
이 물건의 종류에 사용할 수 있습니다 생각하지 않는다 다음과 같은 코드에서이 보일 것이다.
내 질문에 대한 답변에서 내 의견에 답변했습니다. – EvgeniySharapov