gpt4 book ai didi

java - 服务层和 DAO 层中的 Spring 事务

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:05 24 4
gpt4 key购买 nike

在我的示例中,我有一个 Hibernate 实体和一个 DAO。

@Entity
@Table(name="myEntity")
public class MyEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private long id;

@Column(name="action")
private String actionName;

}

...................

@Repository("myDAO")
@Transactional(propagation = Propagation.REQUIRED)
public class MyDAO {

@Autowired
private SessionFactory sessionFactory;

public void saveObject(MyEntity myEntity){
sessionFactory.getCurrentSession().save(myEntity);
}

}

当我以这种方式在服务中使用 DAO 时

@Service("myService")
@Transactional(propagation = Propagation.REQUIRED)
public class MyService
{

@Autowired
private MyDAO myDAO;

public void executeTransaction(){
MyEntity myEntity = new MyEntity();

myEntity.setActionName("Action1");
myDAO.saveObject(myEntity);

// myEntity = new MyEntity();
myEntity.setActionName("Action2");
myDAO.saveObject(myEntity);
}

}

数据库中只保存了一行(Action2)。当我删除评论时,两行(Action1 和 Action2)都被保存(这是我需要的行为)。我的问题是服务层上的事务注释如何影响事务(方法 executeTransaction())的执行。为什么在服务层上没有事务注释,两行都保存在数据库中,只有最后一行用这个注释保存?

最佳答案

没有myEntity = new MyEntity();您在数据库中的记录是更新的,而不是插入的,因为它是同一个实体。我建议设置 <property name="show_sql">true</property>在 hibernate session 中。这将向您展示正在发生的事情。

关于java - 服务层和 DAO 层中的 Spring 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16671605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com