Я хочу сопоставить следующие классы с Hibernate JPA:Hibernate JPA: mappedBy ссылка исключение
Мой код выглядит следующим образом:
@Entity
public class Grid{
@Id
@GeneratedValue
private Long id;
@Column(unique=true)
private String name;
private String location;
private BigDecimal costsPerCPUMinute;
@OneToMany(mappedBy="grid")
private List<Membership> mem;
public List<Membership> getMem() {
return mem;
}
public void setMem(List<Membership> mem) {
this.mem = mem;
}
@Entity
public class User extends Person{
@Column(nullable=false, unique=true)
private String username;
@Column(length=16,columnDefinition="BINARY(16)")
private byte[] password;
@OneToMany(mappedBy="user")
private List<Membership> mem;
public List<Membership> getMem() {
return mem;
}
public void setMem(List<Membership> mem) {
this.mem = mem;
}
@SuppressWarnings("serial")
@Entity
public class Membership implements Serializable{
private Date registration;
private Double discount;
@Id
@ManyToOne
private Grid grid;
@Id
@ManyToOne
private User user;
public Grid getGrid() {
return grid;
}
public void setGrid(Grid grid) {
this.grid = grid;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
К сожалению, я получаю следующее исключение:
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: dst1.model.Membership.grid in dst1.model.Grid.mem
Насколько я понимаю сообщение, сетка cann не может быть найдено в членстве. Но, как вы можете видеть в коде, определенно есть переменная с именем grid в классе Membership.
Есть ли у кого-нибудь идеи, что происходит не так?
Обновление: Как было предложено в комментариях, я также попытался изменить класс членства, используя IDClass или EmbeddedID. Версия EmbeddedID выглядит так:
@SuppressWarnings("serial")
@Entity
public class Membership implements Serializable{
private Date registration;
private Double discount;
@EmbeddedId
private MembershipPK membershipPK;
public Membership(){};
public MembershipPK getMembershipPK() {
return membershipPK;
}
public void setMembershipPK(MembershipPK membershipPK) {
this.membershipPK = membershipPK;
}
@SuppressWarnings("serial")
@Embeddable
public class MembershipPK implements Serializable{
@ManyToOne
private Grid grid;
@ManyToOne
private User user;
public Grid getGrid() {
return grid;
}
public void setGrid(Grid grid) {
this.grid = grid;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
К сожалению, у меня все те же исключения.
Обновление 2: Я завтра переписал все три класса с нуля и обновил этот пост, если это что-то изменит.
Класс Membership имеет два @Id поля, это кажется неправильным. Я не думаю, что это правильный способ сопоставить составной первичный ключ. – Sebastien
Ничего страшного с 2 полями Id, * пока сопровождается * IdClass. – DataNucleus
Я попытался перейти от 2 полей id к EmbeddedId, но все тот же вопрос. – punkyduck