Java 休眠更新一个单向
嗨,我现在花了很多时间来弄清楚为什么我的one hibernate映射没有更新,你们能帮我吗 顺便说一下,我对冬眠还不熟悉 这是BookingModel.java的Java 休眠更新一个单向,java,spring,hibernate,jpa,orm,Java,Spring,Hibernate,Jpa,Orm,嗨,我现在花了很多时间来弄清楚为什么我的one hibernate映射没有更新,你们能帮我吗 顺便说一下,我对冬眠还不熟悉 这是BookingModel.java的 @Entity @Table(name="booking") public class BookingModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") String id; @ManyToOne @JoinColu
@Entity
@Table(name="booking")
public class BookingModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
String id;
@ManyToOne
@JoinColumn(name="teacher", nullable=false)
@JsonManagedReference
TeacherModel teacher;
@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@Column(name="start")
Date start;
@Column(name="end")
Date end;
@Column(name="title")
String title;
//getters and setters
}
@Entity
@Table(name="class")
public class ClassModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private String id;
@ManyToOne
@JoinColumn(name="student")
private StudentModel student;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;
//getters and setters
}
这是ClassModel.java
@Entity
@Table(name="booking")
public class BookingModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
String id;
@ManyToOne
@JoinColumn(name="teacher", nullable=false)
@JsonManagedReference
TeacherModel teacher;
@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@Column(name="start")
Date start;
@Column(name="end")
Date end;
@Column(name="title")
String title;
//getters and setters
}
@Entity
@Table(name="class")
public class ClassModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private String id;
@ManyToOne
@JoinColumn(name="student")
private StudentModel student;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;
//getters and setters
}
这就是我想要实现的方法
BookingModel booking = find(scheduleId);
ClassModel classModel = classDao.getClass(classId);
classModel.setBookingModel(booking);
booking.setClassModel(classModel);
booking.setTitle("TEST");
update(booking);
setTitle正在工作,但my db中的class字段仍然为空
这是更新方法
@Transactional
@Override
public void bookClass(String classId, String scheduleId) {
org.springframework.security.core.userdetails.User user = (org.springframework.security.core.userdetails.User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
BookingModel booking = find(scheduleId);
ClassModel classModel = classDao.getClass(classId);
classModel.setBookingModel(booking);
booking.setClassModel(classModel);
booking.setTitle("TEST");
update(booking);
}
@Override
public void update(E entity) {
try{
Transaction t = currentSession().beginTransaction();
currentSession().update(entity);
t.commit();
}catch(Exception e){
e.printStackTrace();
}
}
提前感谢各位这是因为BookingModel实体不是关系的所有者 如果你试过
@OneToOne(cascade=CascadeType.ALL)
ClassModel classModel;
而不是
@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;
与
而不是
@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;
所以在这种情况下它应该是有效的
或者你也可以这样做,它应该在实体中不改变的情况下工作
BookingModel booking = find(scheduleId);
ClassModel classModel = classDao.getClass(classId);
booking.setTitle("TEST");
update(booking);
classModel.setBokingModel(booking);
update(classModel);
这是因为BookingModel实体不是关系的所有者 如果你试过
@OneToOne(cascade=CascadeType.ALL)
ClassModel classModel;
而不是
@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;
与
而不是
@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;
所以在这种情况下它应该是有效的
或者你也可以这样做,它应该在实体中不改变的情况下工作
BookingModel booking = find(scheduleId);
ClassModel classModel = classDao.getClass(classId);
booking.setTitle("TEST");
update(booking);
classModel.setBokingModel(booking);
update(classModel);
我认为问题在于
@PrimaryKeyJoinColumn
。此注释意味着BookingModel
和ClassModel
应该具有相同的主键
例如,这应该有效(没有update()
语句):
您正在使用@GeneratedValue
和id
类型为String
。不知道这对哪个数据库有效。通常整数类型与@GeneratedValue
一起使用,例如Long
您的
update()
方法中没有rolback()
。我认为问题在于@PrimaryKeyJoinColumn
。此注释意味着BookingModel
和ClassModel
应该具有相同的主键
例如,这应该有效(没有update()
语句):
您正在使用@GeneratedValue
和id
类型为String
。不知道这对哪个数据库有效。通常整数类型与@GeneratedValue
一起使用,例如Long
在你的
update()
方法中没有rolback()
。post complete update methodhi@vikramsingh你试过我的答案吗?@hi@mibrahim.iti,在我的代码中,我只在类模型中插入一个BookingModel@RyanDelaCruz但是您只更新BookingModel,而不更新ClassModel(关系的所有者)我认为这是你的问题,你能添加这个更新(classModel);更新您的代码(预订);告诉我发生了什么?因此,您将更新两个实体,而不仅仅是一个实体,请告诉我在这种情况下会发生什么,谢谢:)post complete update methodhi@Vikramsinghh您是否尝试过我的答案??hi@mibrahim.iti,在我的代码中,我只在类模型中插入一个BookingModel@RyanDelaCruz但是您只更新BookingModel,而不更新ClassModel(关系的所有者)我认为这是你的问题,你能添加这个更新(classModel);更新您的代码(预订);告诉我发生了什么?因此,您将更新两个实体,而不仅仅是一个,请告诉我在这种情况下会发生什么,谢谢:)