0
私はかなり長い間このことに苦労してきましたが、Googleで具体的な回答を得られませんでした。私は、アルバムとユーザーの間に多面的な関係を持っています。そのために、結合テーブルには追加のフィールド「ロール」が定義されています。具体的な実装:hibernate注釈:java.util.Setクラスのプロパティemptyのセッターを見つけることができませんでした
User class :
@Entity
@Table(name="USERS")
public class User {
private long id;
private String userName;
private String password;
private String mailAddress;
private Set<AlbumUser> albumUsers;
// Getters
/**
* @return the id
*/
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getId() {
return id;
}
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @return the password
*/
@Type(type="encryptedString")
public String getPassword() {
return password;
}
/**
* @return the mailAddress
*/
public String getMailAddress() {
return mailAddress;
}
// Setters
/**
* @param id the id to set
*/
public void setId(long id) {
this.id = id;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @param mailAddress the mailAddress to set
*/
public void setMailAddress(String mailAddress) {
this.mailAddress = mailAddress;
}
public String toString()
{
return ("User : " + getUserName());
}
/**
* @return the albumUsers
*/
//----bidirectional association
@Transient
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.user")
public Set<AlbumUser> getAlbumUsers() {
return albumUsers;
}
/**
* @param albumUsers the albumUsers to set
*/
public void setAlbumUsers(Set<AlbumUser> albumUsers) {
this.albumUsers = albumUsers;
}
}
AlbumUser class :
@Entity
@Table(name = "ALBUMS_USERS")
@AssociationOverrides({
@AssociationOverride(name = "pk.album", [email protected](name="album_id")),
@AssociationOverride(name = "pk.user", [email protected](name="user_id"))})
public class AlbumUser {
private AlbumUserPK pk = new AlbumUserPK();
private Role role;
@EmbeddedId
private AlbumUserPK getPk()
{
return pk;
}
private void setPk(AlbumUserPK pk)
{
this.pk = pk;
}
public void setAlbum(Album album) {
getPk().setAlbum(album);
}
@Transient
public Album getAlbum() {
return getPk().getAlbum();
}
public void setUser(User user) {
getPk().setUser(user);
}
@Transient
public User getUser() {
return getPk().getUser();
}
/**
* @return the role
*/
@Enumerated(EnumType.STRING)
public Role getRole() {
return role;
}
/**
* @param role
* the role to set
*/
public void setRole(Role role) {
this.role = role;
}
}
@Embeddable
class AlbumUserPK implements Serializable {
private Album album;
private User user;
/**
* @return the album
*/
@ManyToOne
public Album getAlbum() {
return album;
}
/**
* @param album
* the album to set
*/
public void setAlbum(Album album) {
this.album = album;
}
/**
* @return the user
*/
@ManyToOne
public User getUser() {
return user;
}
/**
* @param user
* the user to set
*/
public void setUser(User user) {
this.user = user;
}
}
私が読んで/挿入しようとするたびに/ ...ユーザー、私は次のエラーを取得する:
org.hibernate.PropertyNotFoundException:内の空のプロパティのセッターが見つかりませんでしたクラスjava.util.Set
これは、AlbumUsersのセットと関係があると思いますが、私はUserクラスを維持しています...このフィールドを一時的にしようとしましたが、役に立たないものです...
誰も同じようなエラーに遭遇しましたか?
おかげで...
ありがとうございますが、どちらもうまくいきませんでした。私はこの解決策に従おうとしました:http://stackoverflow.com/questions/5127129/mapping-many-to-many-association-table-with-extra-columns私には妥当と思われました。心に浮かんでいる唯一の事は、私は間違った関係を持っているということです。ほとんどの例では、実際のユーザーを保存する前にalbumUserを作成しますが、これは嫌です。ユーザーはアルバムを持っていなくても登録/ログインできるはずです。つまり、アルバムの参照はありません... –
実際には、これは私が使ったチュートリアルでした:http://www.mkyong.com/hibernate/hibernate-many-to-many- example-join-table-extra-column-annotation / –