私は最初から新しいプロジェクトを始めています。私はこの問題を解決できません。私には3つの実体があり、それらはすべて互いに数多くの関係を持っています。シトHibernate mappedBy and ManyToMany
@Entity
@Component
@Table(name = "userEntity")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Long id;
@Column(name = "email", nullable = false, unique = true)
private String email;
@Column(name = "password_hash", nullable = false)
private String passwordHash;
@Column(name = "role", nullable = false)
@Enumerated(EnumType.STRING)
private Role role;
@Column(name = "G1", nullable = true)
private String G1;
@Column(name = "G2", nullable = true)
private String G2;
@Column(name = "G3", nullable = true)
private String G3;
@Column(name = "G4", nullable = true)
private String G4;
@Column(name = "G5", nullable = true)
private String G5;
@Column(name = "G6", nullable = true)
private String G6;
@Column (name = "access_token", nullable = true)
private String access_token;
@Column (name = "refresh_token", nullable = true)
private String refresh_token;
public Long getId() {
return id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPasswordHash() {
return passwordHash;
}
public void setPasswordHash(String passwordHash) {
this.passwordHash = passwordHash;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public String getG1() {
return G1;
}
public void setG1(String g1) {
G1 = g1;
}
public String getG2() {
return G2;
}
public void setG2(String g2) {
G2 = g2;
}
public String getG3() {
return G3;
}
public void setG3(String g3) {
G3 = g3;
}
public String getG4() {
return G4;
}
public void setG4(String g4) {
G4 = g4;
}
public String getG5() {
return G5;
}
public void setG5(String g5) {
G5 = g5;
}
public String getG6() {
return G6;
}
public void setG6(String g6) {
G6 = g6;
}
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public String getRefresh_token() {
return refresh_token;
}
public void setRefresh_token(String refresh_token) {
this.refresh_token = refresh_token;
}
@ManyToMany(mappedBy="users_cluster")
private List<User> users_cluster;
@ManyToMany(mappedBy="users_sito")
private List<User> users_sito;
public User(){}
@Override
public String toString() {
return "User{" +
"id=" + id +
", email='" + email.replaceFirst("@.*", "@***") +
", passwordHash='" + passwordHash.substring(0, 10) +
", role=" + role +
'}';
}
}
これは、次のとおりです:これは、ユーザーである
@Entity
@Component
@Table(name = "clusterEntity")
public class Cluster {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Long id;
@Column(name = "name")
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany
@JoinTable(name="cluster_user",
[email protected](name="cluster_id", referencedColumnName="id"),
[email protected](name="user_id", referencedColumnName="id"))
private List<User> users_cluster;
@ManyToMany
@JoinTable(name="cluster_sito",
[email protected](name="cluster_id", referencedColumnName="id"),
[email protected](name="sito_id", referencedColumnName="id"))
private List<Sito> sitos;
@Override
public String toString() {
return "Cluster{" +
"id=" + id +
", name='" + name +
", users='" + users_cluster.toString() +
'}';
}
}
:クラスタがあり
@Entity
@Component
@Table(name = "sitoEntity")
public class Sito {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Long id;
@Column(name = "name")
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany
@JoinTable(name="sito_user",
[email protected](name="sito_id", referencedColumnName="id"),
[email protected](name="user_id", referencedColumnName="id"))
private List<User> users_sito;
@Override
public String toString() {
return "Sito{" +
"id=" + id +
", name='" + name+
", users='" + users_sito.toString()+
'}';
}
}
私はmappedBYについて次のエラーを取得するのmavenでコンパイルしてみてください、まるでそれが関係の両側に書かれているかのように、実際に片面のみに書かれています:
org.hibernate.AnnotationException:関係の両側でmappedByが不正に使用されています:User.users_cluster
誰かが間違っていることを知っていますか?
ユーザーからリストまでの関係がクラスユーザー(それ自身)にマップされていることを、hibernateに伝えました。これは、ある種の再帰を作成します。この場合、mappedBy属性を使用することはできません。エンティティAとエンティティBの間に関係があり、どちらの側が所有者であるかを知るために使用されます。しかし、あなたはエンティティUserからそれ自身へのリレーションシップを持っています。 mappedByでオーナーを定義することは意味がありません(少なくとも私にとって)。 –
ところであなたのエンティティがモデリングしていることを本当に理解していないのですが、3つのエンティティにはManyToMany関係がありますが、Userでは2つのManyToMany関係しかありません。ユーザーがリストとリストを持っていてはならないのですが、リストの代わりにリスト2がありますか? –