[英]Unable to persist data using Spring + Hibernate
我无法使用spring和hibernate保留数据。 我查看了各种帖子,并尝试了许多事情。 但这是行不通的。 我将首先发布我的配置,然后发布我尝试过的步骤。 将不胜感激。
spring-jpa.xml
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" />
<context:component-scan base-package="com.gamelist.dao.classes" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="entityManagerFactory"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
GenericDAO.java
public class GenericDaoJPA<T extends IDomainObject> implements IGenericDao<T> {
protected EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager){
this.entityManager = entityManager;
}
public void save(T object) throws DataAccessException{
entityManager.persist(object);
}
.
.
.
.
}
User.java(域)
@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;
}
}
TestService.java(UserDao实现IUserDao并扩展GenericDao)
@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.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>
我没有收到任何错误或异常。 我可以从数据库中读取。 仅更新,添加或删除不会保留。
这是我尝试过的一切
任何帮助表示赞赏。 提前致谢
提交TX(或刷新休眠)失败。 您的声明式事务性不起作用,或者声明需要进一步扩展。
不应将DAO声明为事务性的吗? 那是实际发生操作的地方,您在TestService的“事务性”声明本身实际上并没有做任何事情-因此Spring可能会错过将HB纳入事务的机会。
我本人通常不使用声明式,因为我发现TX边界很容易且在用户活动中定义得很好-并且在显式编码时(通过我的助手类的第一行)更加可追溯/可靠。
坦白说,我也不知道您对DAO的期望是什么-如果您使用的是JPA / Hibernate,则这些层将处理DAO的工作。 我怀疑您正在用什么都不做的类来充实您的应用程序,该类您不了解的正确用途/用途。
有什么问题:
Session hb = HbHelper.session();
hb.save( user);
HbHelper.commit(); // commits via a TX.
我将这种样式用于“ OpenSessionInView”过滤器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.