Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring4Hibernate4@Transactional(只读=";true";)不起作用_Java_Spring - Fatal编程技术网

Java Spring4Hibernate4@Transactional(只读=";true";)不起作用

Java Spring4Hibernate4@Transactional(只读=";true";)不起作用,java,spring,Java,Spring,我使用Hibernate4、Spring4,我想使用@Transaction注释,但它不起作用 用户对象仍保存在sqlServer上 知道我做错了什么吗 套餐服务; @服务(“用户服务”) 公共类用户服务{ 公共布尔添加操作(用户){ 布尔结果=真; userdao3dao=(UserDAO3)SpringUtil.getBean(“UserDAO3”); List users=dao.searchAllUser(); 对于(用户选择用户:用户){ if(selectedUser.getNa

我使用Hibernate4、Spring4,我想使用@Transaction注释,但它不起作用

用户对象仍保存在sqlServer上

知道我做错了什么吗



套餐服务;
@服务(“用户服务”)
公共类用户服务{
公共布尔添加操作(用户){
布尔结果=真;
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;