Java Spring4Hibernate4@Transactional(只读=";true";)不起作用
我使用Hibernate4、Spring4,我想使用@Transaction注释,但它不起作用 用户对象仍保存在sqlServer上 知道我做错了什么吗Java Spring4Hibernate4@Transactional(只读=";true";)不起作用,java,spring,Java,Spring,我使用Hibernate4、Spring4,我想使用@Transaction注释,但它不起作用 用户对象仍保存在sqlServer上 知道我做错了什么吗 套餐服务; @服务(“用户服务”) 公共类用户服务{ 公共布尔添加操作(用户){ 布尔结果=真; userdao3dao=(UserDAO3)SpringUtil.getBean(“UserDAO3”); List users=dao.searchAllUser(); 对于(用户选择用户:用户){ if(selectedUser.getNa
套餐服务;
@服务(“用户服务”)
公共类用户服务{
公共布尔添加操作(用户){
布尔结果=真;
userdao3dao=(UserDAO3)SpringUtil.getBean(“UserDAO3”);
List users=dao.searchAllUser();
对于(用户选择用户:用户){
if(selectedUser.getName().equals(user.getName())){
结果=假;
打破
}
}
结果=dao.insert(用户);
返回结果;
}
}
从 这只是 作为实际事务子系统的提示;不会的 必然导致写入访问尝试失败。交易 无法解释只读提示的管理器不会抛出 请求只读事务时出现异常 事务的隔离级别是否可以更改取决于实现。根据驱动程序的不同,可能会发生不同的情况,不保证会发生故障。POJO:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
修改:
@Id
@Column(name = "id")
private Integer id;
消除
@GeneratedValue(strategy=GenerationType.AUTO)
在ibm.com上看一下,这里的解释真的很棒。您的问题在这里得到了回答。如果我想通过该方法访问数据库时出现异常,我如何通过@Transactional,thank@hau-玉强,你不能\@事务性并不是为此而设计的!谢谢你的建议,但解决方法是在用户POJORead中删除primaryKey上的@GeneratedValue(strategy=GenerationType.AUTO),这只是一个提示,并不意味着它确实做了什么。然而,这里的主要问题是,您正在使用不同的会话进行阅读,然后保存。该会话是只读的,但仅适用于读入该会话的实体。除此之外,从您使用spring的方式来看,您的设置中也存在一些错误,这并不奇怪。您应该使用依赖项注入而不是一些奇怪的单例构造(我希望它是单例)来检索bean实例。ia m使用上下文:applicationContext.xml中的组件扫描,以及如何进行依赖项注入?使用@Autowired
获取服务中所需的依赖项。另外,您的事务边界应该是您的服务方法,而不是dao方法。我已经在UserDAO3类中的sessionFactory上使用了依赖项注入,在服务类中使用了事务注释,但仍然不起作用,知道我做错了什么吗?tks~但你并没有像你应该的那样在任何地方使用它。你只是部分地使用它。幸运的是,您甚至可以在每次请求bean时构造它们的新实例,从而导致非常好的调试问题。
package SpringDAO;
@Repository("UserDAO3")
public class UserDAO3 {
SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory value){
this.sessionFactory = value;
}
public SessionFactory getSessionFactory(){
return this.sessionFactory;
}
@Transactional(readOnly = true)
public boolean insert(Object user){
Session sess = this.sessionFactory.getCurrentSession();
sess.save(user);
return true;
}
}
package service;
@Service("UserService")
public class UserService {
public boolean addAction(User user){
boolean result = true;
UserDAO3 dao = (UserDAO3)SpringUtil.getBean("UserDAO3");
List<User> users = dao.searchAllUser();
for(User selectedUser : users){
if(selectedUser.getName().equals(user.getName())){
result = false;
break;
}
}
result = dao.insert(user);
return result;
}
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@Id
@Column(name = "id")
private Integer id;