我正在尝试更新名为User的实体,虽然成功地对用户对象进行了更改,但当我尝试将用户(通过更新方法)保存到数据库时,它不会持久存在。此类的其他功能如get()。没有例外。
-----------------------------AbstractDAOImpl.class-----------------------------------
@Transactional
@Repository
public abstract class AbstractDaoImpl<T> {
private static final Logger LOG = Logger.getLogger(StockController.class);
private Class currentClass;
@PersistenceContext(type = PersistenceContextType.EXTENDED)
protected EntityManager entityManager;
protected void setThisClass(Class currentClass) {
this.currentClass = currentClass;
}
@SuppressWarnings("unchecked")
public T get(String id) {
return (T) entityManager.find(currentClass, id);
}
public void delete(String id) {
entityManager.remove(get(id));
}
public void update(T t) {
entityManager.merge(t);
entityManager.flush();
}
@SuppressWarnings("unchecked")
public List list(String tableName) {
return entityManager.createQuery("from " + tableName, currentClass).getResultList();
}
}
------------------------Application.properties------------------------
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.username=SYSTEM
spring.datasource.password=password
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.jpa.database-platform=Oracle11gDialect
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle8iDialect
spring.resources.static-locations=file:src/main/resources/
spring.resources.cache-period=0
spring.thymeleaf.cache=false
spring.http.converters.preferred-json-mapper=jackson
security.basic.enabled=false
security.headers.content-type=true
security.enable-csrf=true
security.basic.path=/**
我已经做了各种尝试来实现此处列出的其他修复,但没有运气,包括从实体管理器开始获取事务,并在其间使用update()的当前内容结束事务。如果需要其他信息,如实体类,请告诉我,我将编辑我的帖子。
答案 0 :(得分:0)
问题不在于我的User对象没有被持久化,而是它内部的另一个实体的List名为holdings。为了解决这个问题,我将cascade=CascadeType.ALL
添加到了一对多注释属性的列表中,如此。
@OneToMany(mappedBy = "user", cascade= CascadeType.ALL)
private List<UserHolding> holdings;