내 스키마는 다음과 같습니다 공동의 가치 + 확장 아버지의 실체와 중앙 테이블 :엔티티 상속 :
내 NOMINATION
표는 나의 후보의 4 사이의 공통 데이터를 보유하고 있습니다. 당신이 볼 수있는
지금, 나는 단지 3가
- 동료 지명 :
나는 후보의 4 개 유형이 이 레거시 데이터 모델에서 동료 임명이 필요로하는 유일한 데이터는 추천 표.
그래서 기본적으로 나는 차별에 열CATEGORY_CODE
에DiscriminatorColumn
을 사용하고 메인Nomination
엔티티로부터 상속 5 개 단체, 4를했다.Nomination
법인 ->CoworkerNom
,TeamNom
,IdeaNom
,SuccessNom
. 특정 테이블에서1. 왜 특정의 DAO가 인출되지 않은 열 :
나는이 개 질문이?
Nomination.java :
@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; //So on
IdeaNom.java :
@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; //so on
AuditableEntity.java :
@MappedSuperclass public abstract class AuditableEntity { /** * The user who last updated this object. This object is lazy loaded, so * make sure a session is open */ @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY /*optional = true*/) @JoinColumn(name = "UPDATED_BY", referencedColumnName = "EMP_ID", nullable = true) @Cascade(value = {org.hibernate.annotations.CascadeType.PERSIST, org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.SAVE_UPDATE}) private Employee modifiedBy = null; /** * The last system update timestamp for this entity */ @Column(name = "UPDATED_DATE", nullable = true) @Temporal(value = TemporalType.TIMESTAMP) private Date modifiedOn = null; //getters and setters
내 findByAll 방법은 다음과 같습니다
예를 들어public List<T> findAll() { if (logger.isDebugEnabled()) { logger.debug("findAll"); } return currentSession().createCriteria(getPersistentClass()).list(); }
및 내 DAO는 기본적으로이 메서드가 위치한
AbstractHibernateDAO
에서 상속받습니다.AbstractHibernateDAO
->NominationHibernateDAO
->IdeaNomHibernateDAO
과 같습니다.Caused by: java.sql.SQLException: Invalid column name 'ACTUAL_SITUATION'. at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368) at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820) at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258) at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632) at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477) at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:778) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) at org.hibernate.loader.Loader.getResultSet(Loader.java:1953) at org.hibernate.loader.Loader.doQuery(Loader.java:802) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) at org.hibernate.loader.Loader.doList(Loader.java:2533) ... 38 more
ACTUAL_SITUATION
는 Idea_Nom 열, 그래서NOMINATION
에서 일반 컬럼에서의 정지를 추측하고, 특정 열을 가져 오는 아니에요 :나는 다음과 같은 오류가 발생합니다.
2. 유형에 관계없이 모든 후보자 명단을 어떻게 얻을 수 있습니까? Nomination 엔터티에 대해 제네릭 DAO를 단독으로 실행할 수 있습니까? 이것은 내가 이미
NominationHibernateDAO
을 가지고 있다고 언급 한 바보 같은 질문 일지 모르지만, 지금까지 나의 카운트 방법이 DiscriminatorColumn을 기반으로하는 특정 카운트만을 반환하기 때문에 나는 단지 궁금하다.당신이 상속 전략을 지정하지 않은Nomination
에서
나는 이것을 시도하고 알려 드리겠습니다. – Nimchip
이제 나는 다음과 같이 나타납니다 :'원인 : java.sql.SQLException : 잘못된 열 이름 'UPDATED_BY'. 이것은 아버지 엔티티 '지명'이 상속하는 'AuditableEntity'에 속합니다. 스 니펫 상단에 '추천'을 표시 할 수 있습니다. – Nimchip
내 메인 포스트에 추가 된, 나는이 골격 엔티티를 사용했습니다. 내 골격 엔티티와 그 다른 엔티티들도 테스트 해 보았습니다 ... – Nimchip