웹에서 많은 예제를 보면서 복합 키를 얻으려고 며칠 동안 노력했지만 아직 작동하지 않아 뭔가가 누락되었습니다. 아래에 게시 된 코드를 사용하여 다음과 같은 오류가 발생했습니다. 형식을 확인할 수 없습니다. 표 : 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;
}
}
위의 예에서 볼 수 있듯이이 작업을 수행했지만 귀하의 대답에 따라 조금 더 생각하게되었습니다. 그것은 제가 테이블 구조를 정의하기 위해 대부분의 객체에서 사용하고있는 추상 클래스를 생각하게했습니다. 거기에 "일관성없는"문제를 일으키는 모든 변수 선언에 대한 주석이 있습니다. 감사 !! – MikeR