2012-07-27 1 views
0

웹에서 많은 예제를 보면서 복합 키를 얻으려고 며칠 동안 노력했지만 아직 작동하지 않아 뭔가가 누락되었습니다. 아래에 게시 된 코드를 사용하여 다음과 같은 오류가 발생했습니다. 형식을 확인할 수 없습니다. 표 : USER_PROFILE, java.util.Set, 열 : [org.hibernate.mapping.Column (userProfileDataFilter)].JPA 복합 키 (추가 열 매핑 포함)

UserProfile 개체에서 UserProfileDataFilter를 주석 처리하면 모든 것이 저장 및 삭제와 함께 원활하게 실행됩니다. 주석에서 변수를 getter로 옮겼습니다. 그래서, 내가해야 할 일이 무엇인지 확신 할 수 없기 때문에 나는 여기서 도움을 청합니다.

이 사악한 미로의 미로를 통한 안내는 대단히 감사하겠습니다.

사용자 프로파일 CLASS :

@Entity 
@Table(name="USER_PROFILE") 
public class UserProfile extends UserProfileAbstract implements Serializable { 

private static final long serialVersionUID = CommonDefines.SERIALVERSIONUID; 

public Company company; 
private Set<UserProfileDataFilter> userProfileDataFilter = new HashSet<UserProfileDataFilter>(0); 

public UserProfile(){super();} 
public UserProfile(String ploginName, String ppassword, Date ppasswordExprDt, String pfirstName, String plastName, 
     String pemail, UUID pcompanyId, Long pstatusId, UUID pcrtdId, Date pcrtdDt, UUID pmodId, Date pmodDt){ 

    super(ploginName, ppassword, ppasswordExprDt, pfirstName, plastName, 
      pemail, pcompanyId, pstatusId, pcrtdId, pcrtdDt, pmodId, pmodDt); 
} 

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="COMPANY_ID",insertable=false,updatable=false,nullable=false) 
public Company getCompany() { 
    return company; 
} 
public void setCompany(Company company) { 
    this.company = company; 
} 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.userProfile", cascade=CascadeType.ALL) 
public Set<UserProfileDataFilter> getUserProfileDataFilter() { 
    return userProfileDataFilter; 
} 
public void setUserProfileDataFilter(
     Set<UserProfileDataFilter> userProfileDataFilter) { 
    this.userProfileDataFilter = userProfileDataFilter; 
} 

USER 프로파일 데이터 필터 CLASS (COMPOSITE KEY)

@Entity 
@Table(name="USER_PROFILE_DATA_FILTER") 
@AssociationOverrides({ 
@AssociationOverride(name="pk.userProfile", [email protected](name="USER_PROFILE_ID")), 
@AssociationOverride(name="pk.dataFilter", [email protected](name="DATA_FILTER_ID")) }) 
public class UserProfileDataFilter implements Serializable { 

private static final long serialVersionUID = CommonDefines.SERIALVERSIONUID; 
private UserProfileDataFilterPK pk = new UserProfileDataFilterPK(); 
private UUID crtdId; 
private Date crtdDt; 
private UUID modId; 
private Date modDt; 

@EmbeddedId 
public UserProfileDataFilterPK getPk() { 
    return pk; 
} 

public void setPk(UserProfileDataFilterPK pk) { 
    this.pk = pk; 
} 

@Transient 
public UserProfile getUserProfile() { 
    return getPk().getUserProfile(); 
} 

public void setUserProfile(UserProfile userProfile) { 
    getPk().setUserProfile(userProfile); 
} 

@Transient 
public DataFilter getDataFilter() { 
    return getPk().getDataFilter(); 
} 

public void setDataFilter(DataFilter dataFilter) { 
    getPk().setDataFilter(dataFilter); 
} 


@Column(name="CRTD_ID", nullable=false) 
public UUID getCrtdId() { 
    return crtdId; 
} 

public void setCrtdId(UUID crtdId) { 
    this.crtdId = crtdId; 
} 

@Column(name="CRTD_DT", nullable=false) 
@Temporal(TemporalType.TIMESTAMP) 
public Date getCrtdDt() { 
    return crtdDt; 
} 

public void setCrtdDt(Date crtdDt) { 
    this.crtdDt = crtdDt; 
} 

@Column(name="MOD_ID", nullable=false) 
public UUID getModId() { 
    return modId; 
} 

public void setModId(UUID modId) { 
    this.modId = modId; 
} 

@Column(name="MOD_DT", nullable=false) 
@Temporal(TemporalType.TIMESTAMP) 
public Date getModDt() { 
    return modDt; 
} 

public void setModDt(Date modDt) { 
    this.modDt = modDt; 
} 
} 

USER 프로파일 데이터 필터 PK (클 키를 정의하는 데 사용)

@Embeddable 
public class UserProfileDataFilterPK implements Serializable { 


private static final long serialVersionUID = CommonDefines.SERIALVERSIONUID; 
private UserProfile userProfile; 
private DataFilter dataFilter; 

@ManyToOne 
public UserProfile getUserProfile() { 
    return userProfile; 
} 
public void setUserProfile(UserProfile userProfile) { 
    this.userProfile = userProfile; 
} 

@ManyToOne 
public DataFilter getDataFilter() { 
    return dataFilter; 
} 
public void setDataFilter(DataFilter dataFilter) { 
    this.dataFilter = dataFilter; 
} 

public boolean equals(Object o) { 
if (this == o) return true; 
if (o == null || getClass() != o.getClass()) return false; 

UserProfileDataFilterPK that = (UserProfileDataFilterPK) o; 

if (userProfile != null ? !userProfile.equals(that.userProfile) : that.userProfile != null) return false; 
if (dataFilter != null ? !dataFilter.equals(that.dataFilter) : that.dataFilter != null) 
    return false; 

return true; 
} 

public int hashCode() { 
    int result; 
    result = (userProfile != null ? userProfile.hashCode() : 0); 
    result = 31 * result + (dataFilter != null ? dataFilter.hashCode() : 0); 
    return result; 
} 
} 

데이터 필터 클래스 :

@Entity 
@Table(name="DATA_FILTER") 
public class DataFilter extends DataFilterAbstract { 

private static final long serialVersionUID = CommonDefines.SERIALVERSIONUID; 

@Transient 
protected boolean selected; 

@OneToMany(mappedBy="dataFilterId") 
public Set<DataFilterDetail> dataFilterDetails; 

public DataFilter(){super();} 
public DataFilter(boolean pselected, String pname, String pdescription, boolean pActive, UUID pcrtdId, Date pcrtdDt, UUID pmodId, Date pmodDt){ 
    super(pname,pdescription,pActive, pcrtdId, pcrtdDt, pmodId, pmodDt); 
    selected = pselected; 
} 

public boolean isSelected() { 
    return selected; 
} 
public void setSelected(boolean selected) { 
    this.selected = selected; 
} 
public Set<DataFilterDetail> getDataFilterDetails() { 
    return dataFilterDetails; 
} 
public void setDataFilterDetails(Set<DataFilterDetail> dataFilterDetails) { 
    this.dataFilterDetails = dataFilterDetails; 
} 

}

답변

0

때때로 당신이 accessores (게터)에 가끔 필드에 주석을 넣어. 주어진 클래스 계층에서 항상 같은 위치에 놓으십시오.

IIRC, Hibernate는 @Id (또는 @EmbeddedId) 주석과 동일한 위치에 배치 된 주석만을 고려한다. 따라서 @Id이 getter에 있고 필드에 @OneToMany이 있으면 @OneToMany 주석이 무시됩니다.

+0

위의 예에서 볼 수 있듯이이 작업을 수행했지만 귀하의 대답에 따라 조금 더 생각하게되었습니다. 그것은 제가 테이블 구조를 정의하기 위해 대부분의 객체에서 사용하고있는 추상 클래스를 생각하게했습니다. 거기에 "일관성없는"문제를 일으키는 모든 변수 선언에 대한 주석이 있습니다. 감사 !! – MikeR