我正在尝试进行插入,并使用生成的实体更新同一事务中的 N 条记录。
出现错误“FK 不存在”,观察查询的日志跟踪以触发指令的相反顺序执行。
服务:
@Transactional
public Entity1 createEntity(Entity1 newEntity){
Entity1 inserted = dao.createEntity(newEntity);
Integer numUpdated = dao.updateEntity2(newEntity)
return inserted;
}
Dao:
public Entity1 createEntity(Entity1 newEntity){
this.em.persist(newEntity);
//now newEntity has PK
return newEntity;
}
public Integer updateEntity2(Entity1 newEntity){
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaUpdate<Entity2> uq = cb.createCriteriaUpdate(Entity2.class);
Root<Entity2> rootEntity2 = uq.from(Entity2.class);
uq.set(rootEntity2 .get(Entity2_.entity1), newEntity);
return em.createQuery(uq).executeUpdate();
}
实体:
@Entity
public class Entity1 implements Serializable {
[...]
@OneToMany(mappedBy="entity1",fetch=FetchType.LAZY)
private List<Entity2 > entity2s;
[...]
}
@Entity
public class Entity2 implements Serializable {
[...]
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="E1_ID")
private Entity1 entity1;
[...]
}
这个想法是不必用刷新来关闭事务,因为我知道写下事务性的方法应该允许这样做
喵喵时光机
相关分类