hibernate/JPA合并vs saveOrUpdate
我使用SpringJPA 我有两个实体时间表和用户。他们有多对一的关系。我把它们定义为hibernate/JPA合并vs saveOrUpdate,hibernate,jpa,merge,Hibernate,Jpa,Merge,我使用SpringJPA 我有两个实体时间表和用户。他们有多对一的关系。我把它们定义为 @Entity @Table(name = "timesheet") public class TimeSheet implements java.io.Serializable { ... private User user; ...... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", refer
@Entity
@Table(name = "timesheet")
public class TimeSheet implements java.io.Serializable {
...
private User user;
......
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", referencedColumnName = "user_id", nullable = false)
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
及
更新2:
执行哪些查询?它应该只加载您要求合并的时间表。请使用hibernate格式化SQL。format_SQL=true并将其作为问题的更新发布。这里看不懂。引发了什么会话异常?您可能需要查看。请将完整的SQL select查询发布到更新时执行的一个实例。时间表是否用@EntityselectBeforeUpdate=true注释?执行哪些查询?它应该只加载您要求合并的时间表。请使用hibernate格式化SQL。format_SQL=true并将其作为问题的更新发布。这里看不懂。引发了什么会话异常?您可能需要查看。请将完整的SQL select查询发布到更新时执行的一个实例。时间表是否用@EntityselectBeforeUpdate=true注释?
@Entity
@Table(name = "user")
public class User implements java.io.Serializable {
...
private List<TimeSheet> timesheet = ShrinkableLazyList
.decorate(new ArrayList(), FactoryUtils
.instantiateFactory(TimeSheet.class));
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
public List<TimeSheet> getTimesheet() {
return timesheet;
}
public void setTimesheet(List<TimeSheet> timesheet) {
this.timesheet = timesheet;
}
........................................
Hibernate: select timesheet0_.timesheet_id as ...........
Hibernate: select timesheet0_.timesheet_id as ...........
Hibernate: select timesheet0_.timesheet_id as ...........
Hibernate: select timesheet0_.timesheet_id as ...........
Hibernate: select timesheet0_.timesheet_id as .........
.........................................
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public TimeSheet saveTimeSheet(TimeSheet timeSheet) {
// Session s=entityManager.unwrap(HibernateEntityManager.class).getSession();
// s.saveOrUpdate(timeSheet);
TimeSheet result = entityManager.merge(timeSheet);
// TimeSheet result=timeSheet;
return result;
}