Java 无法使用Spring+;持久化数据;冬眠
我无法使用spring和hibernate持久化数据。我看了很多帖子,尝试了很多东西。但它就是不起作用。 我将先发布配置,然后发布我尝试的步骤。非常感谢您的帮助 spring-jpa.xml java(UserDao实现IUserDao并扩展GenericDao) persistence.xmlJava 无法使用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
<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
我没有收到任何错误、异常或任何东西。我能够从我的数据库中读取数据。仅更新、添加或删除不会持久化
这就是我所尝试的
感谢您的帮助。提前感谢提交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.