일부 DAO를 테스트하려고합니다.엔티티 상속 및 discriminatorColumns
@Entity(name = "Nomination")
@Table(name = "NOMINATION")
@DiscriminatorColumn(name="CATEGORY_CODE", discriminatorType = DiscriminatorType.STRING, length = 1)
public class Nomination extends AuditableEntity {
@Id
@Column(name = "NOM_ID", insertable = true, updatable = true,
nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Transient
protected NominationType type = null;
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "PERIOD_ID", referencedColumnName = "PERIOD_ID")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.MERGE})
private NomPeriod period = null;
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "CATEGORY_CODE", referencedColumnName = "CATEGORY_CODE")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.MERGE})
private Category category = null;
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "NOMINATOR_ID", referencedColumnName = "EMP_ID")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.MERGE})
private Employee nominator = null;
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "STATUS_ID", referencedColumnName = "STATUS_ID")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.MERGE})
private Status status = null;
//more after this line
지금은 지명 (생각, 팀, 성공, 그리고 동료 후보)의 4 개 가지 유형과 4 개 개의 테이블이 (:
나는 Nomination
라는 이름의 엔티티 (테이블)을 가지고, 그것은 몇 가지 속성을 가지고 후보, team_nom, idea_nom, success_nom). 하나 (지명)에는 공통 열이 있습니다. 이것은 CoworkerNom
라고하는 첫 번째 추천 유형과 일치합니다. NOMINATION 테이블에 나열된 것만 필요하기 때문에 별도의 테이블이 없습니다. 다른 3 개 후보작은 TeamNom
, SuccessNom
및 IdeaNom
입니다. 이것들은 추가적인 데이터를 가지고 있기 때문에 그들 자신의 테이블을 가지며, 그래서 그들 자신의 엔티티도 가지고 있습니다. 예를 들어
@Entity(name = "IdeaNom")
@Table(name = "IDEA_NOM")
@DiscriminatorValue("I")
public class IdeaNom extends Nomination {
@Column(name = "PURPOSE_INC", insertable = true, updatable = true,
nullable = true)
private Boolean purposeIncrease;
@Column(name = "PURPOSE_SIMPLIFY", insertable = true, updatable = true,
nullable = true)
private Boolean purposeSimplify;
//more after this line
이 구조 SuccessNom
및 TeamNom
적용된다.
이 작업을 수행하는 방법을 이해하는 데 문제가 있습니다. 그러나 지금은 DAO를 일부 수행했으며 테스트를 시도하고 있습니다. 그러나 나는 다음과 같은 오류가 점점 오전 : 모든
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity:
com.dev.test.data.entity.SuccessNom column: CATEGORY_CODE (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:676)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:698)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:720)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:474)
at org.hibernate.mapping.SingleTableSubclass.validate(SingleTableSubclass.java:65)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1362)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
... 54 more
먼저, CATEGORY_CODE는 판별입니다 ...하지만 쓰기 가능 할 수 있어야한다. 바라건대 너희들이 나를 다시 도울 수 있기를.
편집 : 당신은 판별 자 컬럼을지도 insert="false" update="false"
로 매핑해야하는 경우이 내 스키마
나는 그 열에 합류하지 않고있다. 나는 ID에 가입하고있다. 내 감동은 그 이름이 말하고 x category_code가있는 행을 특정 하위 엔티티에 속성으로 지정한다는 것이다. 아마 내가 먼저 말 했어야했다. 필자는 스키마를 편집하고 보여줄 것이므로 잘하면 더 명확해질 것이다. – Nimchip
@JoinColumn (name = "CATEGORY_CODE", referencedColumnName = "CATEGORY_CODE") – Bozho
그래서 그냥 제거하고 하위 엔터티가 어떤 Category_code를 설정할 수있게해야한다고 말하는 것입니까? 나는 당신이 무엇을 말하고 있는지 알고 있다고 생각합니다. (아마도?)하지만 나는 discriminator annotations에 대해 알아 내기 전에 주체 (subject) 지명 (nominal)에 조인을 썼습니다. (DAO를 테스트하고있는 테이블 세트 단순히 작동하지 않았다). – Nimchip