如果我已经在使用@Transactional

时间:2019-02-22 23:07:01

标签: java spring hibernate spring-boot jpa

我在Spring Boot应用程序中使用 JPA

我只是开始使用它,我有一些疑问。

我的 DAO 代码如下:

@Transactional
public class DatabaseUnitDao implements IDatabaseUnitDao {

@PersistenceContext
    private EntityManager entityManager;

@Override
    public void create(Unit unit) {
        final String CREATE_UNIT =
                "CREATE TABLE " + unit.getName() + " (id VARCHAR(255) PRIMARY KEY NOT NULL, value text NOT NULL)";
        entityManager.persist(unit);   // add an info about unit in the general table
        entityManager.createNativeQuery(CREATE_UNIT).executeUpdate(); // create table for this units
    }
}

1。在这种情况下,我应该使用flush()吗?

2。仅用@Transactional注释DAO类就足够了吗?

某些资源表明需要使用 @EnableTransactionManagement 来使用@Transactional。

1 个答案:

答案 0 :(得分:2)

  1. 否。 JPA提供程序必须在事务方法调用结束时为您完成此操作。

  2. 是的。 Spring Boot默认情况下启用事务管理(proxyTargetClass = true)