数据不能持久到数据库Spring Boot hibernate

时间:2018-03-07 10:51:01

标签: java hibernate spring-boot

我正在尝试更新名为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()的当前内容结束事务。如果需要其他信息,如实体类,请告诉我,我将编辑我的帖子。

1 个答案:

答案 0 :(得分:0)

问题不在于我的User对象没有被持久化,而是它内部的另一个实体的List名为holdings。为了解决这个问题,我将cascade=CascadeType.ALL添加到了一对多注释属性的列表中,如此。

@OneToMany(mappedBy = "user", cascade= CascadeType.ALL)
private List<UserHolding> holdings;