我对hibernate的经验很少,所以这可能是一个适当的新手问题:
为了简单地说明这个问题,我想说我有两种类型的对象,家庭和人。一个家庭由几个人组成。
如果我在家庭中定义了一对多关系,那么两者之间的关系将作为外键包含在人员表中。然后我假设将人员添加到系列中,然后保存系列对象,就足以将这种关系引入数据库。但是,情况似乎并非如此。
我目前要做的是:
1)在家庭中添加上述一对多关系,这为我提供了向家庭对象添加或删除人员的必要方法。
2)在人物对象上添加多对一关系给家庭,这使我可以从这个人那里引用这个家庭。
3)然后我继续使用手动设置的族参考将此人物对象添加到族对象。然后我保存了家庭对象。
这看起来真的很麻烦和错误。有没有更好的方法呢?
答案 0 :(得分:2)
由于Family
到Person
是一对多的关系,Family
类应该有一个集合属性(例如,A List)来保存其Person
的集合。
在方法中向Family
添加Person
时,您可以封装在Person
和Family
之间设置引用的过程,例如,名为{的方法{1}}。您的addPerson()
和Family
类看起来像这样:
Person
@Entity
public class Family{
@OneToMany(cascade = CascadeType.ALL, mappedBy="family")
private List<Person> personList = new ArrayList<Person>();
public void addPerson(Person personToAdd){
this.personList.add(personToAdd);
personToAdd.setFamily(this);
}
/**getter and setter**/
}
然后将Person添加到现有族(ID = 1):
@Entity
public class Person{
@JoinColumn(name="family_id")
@ManyToOne
private Family family;
/**getter and setter**/
}
答案 1 :(得分:1)
您正在做的事情没有错,它被称为逆映射。这在逻辑上是正确的。
在 Person.java
中Family family;
在 Family.java
中List<Persons> familyMembers; //or any other collection.
如果人上的家庭不需要反向引用,则可以将其删除。您可以尝试示例here。