클래스에 복합 기본 키를 추가하려고하는데 문제가 있습니다. 다음은 수업입니다. @IdClass with non-primative @Id
class User {
private long id;
...
}
class Token {
private User user;
private String series;
...
}
나는 실제로 내가 JPA에 의존하지 않으려는 높은 수준의 API의 일부이기 때문에 클래스를 매핑 할 orm.xml을 사용하고 있습니다 - 그것은 구현을 가지고 있습니다. 여기
그것이 :
마지막으로...
<entity class="User">
<attributes>
<id name="id">
<generated-value strategy="AUTO"/>
</id>
...
</attributes>
</entity>
<entity class="Token">
<id-class class="TokenPK"/>
<attributes>
<id name="series"/>
<id name="user"/>
<many-to-one name="user"/>
</attributes>
</entity>
는 모든 작업을하기 위해, 나는 TokenPK 클래스를 만들었습니다 그리고는 다음과 같습니다
public class TokenPK implements Serializable {
private String series;
private User user;
public TokenPK() {
}
public TokenPK(String series, User user) {
this.series = series;
this.user = user;
}
public String getSeries() {
return series;
}
public void setSeries(String series) {
this.series = series;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RememberMeTokenPK that = (TokenPK) o;
if (!series.equals(that.series)) return false;
if (!user.equals(that.user)) return false;
return true;
}
@Override
public int hashCode() {
int result = series.hashCode();
result = 31 * result + user.hashCode();
return result;
}
}
나는 데 문제가 있다는 것입니다 Hibernate는 'BLOB/TEXT 컬럼'사용자 '가 키 길이없이 키 명세에서 사용 되었기 때문에 mysql 테이블을 생성 할 수 없다는 사실에 만족하고있다.
제 문제는 실제로 열이 처음에 BLOB로 저장된다는 것입니다. 내가 id 클래스를 넣을 때까지는 잘 작동했지만 사용자는 id를 통해 링크되었습니다. Hibernate가 기본 키로 사용하고있는 사용자의 ID에 긴 값을 사용하게하려면 어떻게해야합니까?
업데이트 orm.xml :
<entity class="Token">
<id-class class="TokenPK"/>
<attributes>
<id name="series"/>
<id name="user">
<column name="userId"/>
</id>
<many-to-one name="user">
<join-column name="userId" insertable="false" updatable="false"/>
</many-to-one>
</attributes>
</entity>
나는이 시도하고 나는 org.hibernate.AnnotationException 오류'얻을 : @IdClass로 주석 개체의 속성 (사용자 ID) 찾을 수 없습니다 : Token'이 –
@Column을 추가 (또는 XML로지도를 < column) TokenPK의 필드 – Bozho
orm.xml을 업데이트했는데 (위 참조) org.hibernate.AnnotationException : @Column이 @ ManyToOne 속성 : Token.user' –