Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 无法使用Spring+;持久化数据;冬眠_Java_Spring_Hibernate_Jpa_Entitymanager - Fatal编程技术网

Java 无法使用Spring+;持久化数据;冬眠

Java 无法使用Spring+;持久化数据;冬眠,java,spring,hibernate,jpa,entitymanager,Java,Spring,Hibernate,Jpa,Entitymanager,我无法使用spring和hibernate持久化数据。我看了很多帖子,尝试了很多东西。但它就是不起作用。 我将先发布配置,然后发布我尝试的步骤。非常感谢您的帮助 spring-jpa.xml java(UserDao实现IUserDao并扩展GenericDao) persistence.xml <persistence-unit name="gamelistPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <pr

我无法使用spring和hibernate持久化数据。我看了很多帖子,尝试了很多东西。但它就是不起作用。 我将先发布配置,然后发布我尝试的步骤。非常感谢您的帮助

spring-jpa.xml

java(UserDao实现IUserDao并扩展GenericDao)

persistence.xml

<persistence-unit name="gamelistPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
        <!--
            value='create' to build a new database on each run;
            value='update' to modify an existing database;
            value='create-drop' means the same as 'create' but also drops tables when Hibernate closes;
            value='validate' makes no changes to the database
         -->
    </properties>

</persistence-unit>

org.hibernate.ejb.HibernatePersistence
我没有收到任何错误、异常或任何东西。我能够从我的数据库中读取数据。仅更新、添加或删除不会持久化

这就是我所尝试的

  • 一篇帖子提到将事务类型=“RESOURCE\u LOCAL”更改为JTA,表示RESOURCE\u LOCAL根本不存在。我认为这是如果您只使用hibernate,而在使用RESOURCE\u LOCAL时不管理事务。我相信spring会为您管理交易
  • 有些人提到在使用persist之后执行em.flush或em.getTransaction.begin和commit。但是每次使用上述操作时,我都会遇到这个错误。 不允许在共享EntityManager上创建事务

  • 感谢您的帮助。提前感谢

    提交TX(或刷新休眠)失败。您的声明性事务性不起作用,或者声明需要进一步扩展

    DAO不应该声明为TransasAction吗?这就是实际操作发生的地方,TestService上的“事务性”声明本身实际上并没有做任何事情——因此Spring可能会错过将HB登记到事务中

    我自己一般不使用声明性,因为我发现TX边界在用户活动中很容易定义,并且在显式编码时更容易跟踪/可靠(通过我的助手类,1行)

    坦白地说,我也不知道您希望DAO做什么——如果您使用JPA/Hibernate,这些层处理DAO将做什么。我怀疑您正在使用do nothing类来启动应用程序,而您不了解这些类的正确用途/用法

    有什么问题吗

    Session hb = HbHelper.session();
    hb.save( user);
    HbHelper.commit();  // commits via a TX.
    

    我将此样式与“OpenSessionInView”筛选器一起使用。

    您可以发布您的UserDao类吗?请尝试使用
    @PersistenceUnit
    使用
    事务类型时所述的方法=“RESOURCE_LOCAL
    调用所有这些而不持久的代码是什么?感谢您的回复。我实际上是使用一个教程作为参考设置的。据我所知,DAO层基本上用于对特定对象(在本例中为用户)运行特定查询。entitymanager不也和你在幕后做的一样吗?我也试着使DAO具有事务性。但是问题仍然存在,集成Spring和Hibernate有几种方法。就我个人而言,我将重要的业务逻辑单元放在用户服务中&一些琐碎的东西,比如调用
    entityManager.save()
    ,我避免在其中添加多余的层。我的方法是“在场景前”这样做。很适合尝试使DAO具有事务性,可惜它不起作用。在Google上搜索“如何调试spring声明性事务”&您将找到一些指南。由于某种原因,Hibernate可能没有加入。。你需要调查你自己,这超出了我的个人经验。好的。谢谢你的帮助!!
    @Entity
    @Table(name = "user")
    public class User implements Serializable, IDomainObject{
    private long id;
    private String firstName;
    
    @Id
    @GeneratedValue
    public final long getId(){
        return id;
    }
    
    public void setId(long id){
        this.id = id;
    }
    
    public String getFirstName(){
        return firstName;
    }
    
    public void setFirstName(String firstName){
        this.firstName = firstName;
    }
    }
    
    @Service(value = "testService")
    @Transactional
    public class TestService implements ITestService {
     @Autowired
    private IUserDao userDao;
    
    @Transactional(readOnly = false)
    public void saveUser(User newUser){
        userDao.save(newUser);
    }
    .
    .
    .
    }
    
    <persistence-unit name="gamelistPersistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
            <!--
                value='create' to build a new database on each run;
                value='update' to modify an existing database;
                value='create-drop' means the same as 'create' but also drops tables when Hibernate closes;
                value='validate' makes no changes to the database
             -->
        </properties>
    
    </persistence-unit>
    
    Session hb = HbHelper.session();
    hb.save( user);
    HbHelper.commit();  // commits via a TX.