Я пытаюсь добавить нескольких детей к родителю.В моем примере я добавляю пользователей в класс (класс в школе).Что бы я ни пытался, я всегда добавляю в свою коллекцию только одну, а не обе.
Я использую Hibernate в приложении Swing с SqLite.Я пробовал разные решения, но не могу заставить его работать.Я включил POJOS, отображение и тестовый код.Сохранение и загрузка пользователей / классов работает, добавление одного пользователя в класс также успешно.
User.java
public class User {
private int userid;
private String firstname;
private String lastname;
private Date birthdate;
private String street;
private int housenumber;
private String city;
private String zipcode;
private Set tests;
private Class classgroup;
public User() {
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
*getters en setter for all others*
public Class getClassgroup() {
return classgroup;
}
public void setClassgroup(Class classgroup) {
this.classgroup = classgroup;
}
Пользователь.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="false">
<class name="be.sdgsu.model.pojo.User" table="user">
<id name="userid">
<generator class="identity"/>
</id>
<property name="firstname" not-null="true"/>
<property name="lastname" not-null="true"/>
<property name="birthdate"/>
<property name="street"/>
<property name="housenumber"/>
<property name="city"/>
<property name="zipcode"/>
<set name="tests" inverse="false">
<key column="userid"/>
<one-to-many class="be.sdgsu.model.pojo.Poptest"/>
</set>
<many-to-one name="classgroup" column="classid"/>
</class>
</hibernate-mapping>
Class.java
public class Class {
private int classid;
private String name;
private Education education;
private Set<User> users = new HashSet<>();
public Class() {
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Education getEducation() {
return education;
}
public void setEducation(Education education) {
this.education = education;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}
Класс.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="false">
<class name="be.sdgsu.model.pojo.Class" table="class">
<id name="classid">
<generator class="identity"/>
</id>
<property name="name" type="java.lang.String" not-null="true"/>
<many-to-one name="education" column="educationid"/>
<set name="users" inverse="false">
<key column="classid"/>
<one-to-many class="be.sdgsu.model.pojo.User"/>
</set>
</class>
</hibernate-mapping>
UserDao.java
public class ClassDao {
public Class saveClass(Class class1) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.saveOrUpdate(class1);
session.getTransaction().commit();
return class1;
}
public Class getClass(int classid) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("FROM Class WHERE id=:ident").setParameter("ident", classid);
Class class1 = (Class) query.uniqueResult();
session.getTransaction().commit();
return class1;
}
}
ClassDaoTest.Ява
@Test
public void getUsersInClass() {
class1 = classDao.saveClass(class1);
User user1 = userDao.saveUser(TestData.getUser());
User user2 = userDao.saveUser(TestData.getUser());
class1.getUsers().add(user1);
class1.getUsers().add(user2);
classDao.saveClass(class1);
assertTrue("There were no two users retrieved", classDao.getClass(class1.getClassid()).getUsers().size() > 1);
}