Гибернация отображения один-к-одному
У меня есть взаимно-однозначное отображение между учеником класса и точками класса:
@Entity
@Table(name = "Users")
public class Student implements IUser {
@Id
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
@Column(name = "password")
private String password;
@OneToOne(fetch = FetchType.EAGER, mappedBy = "student")
private Points points;
@Column(name = "type")
private int type = getType();
//gets and sets...
@Entity
@Table(name = "Points")
public class Points {
@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "student"))
@Id
@GeneratedValue(generator = "generator")
@Column(name = "id", unique = true, nullable = false)
private int Id;
@OneToOne
@PrimaryKeyJoinColumn
private Student student;
//gets and sets
И тогда я делаю:
Student student = new Student();
student.setId(1);
student.setName("Andrew");
student.setPassword("Password");
Points points = new Points();
points.setPoints(0.99);
student.setPoints(points);
points.setStudent(student);
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(student);
session.getTransaction().commit();
И hibernate сохраняет студента в таблице, но не сохраняет соответствующие пункты. Это нормально? Должен ли я сохранять баллы отдельно?
3 ответа:
@OneToOne(fetch = FetchType.EAGER, mappedBy = "student", cascade=CascadeType.PERSIST) private Points points;
Вы можете попробовать это.