Hibernate代码中的“TM”导致混乱

时间:2016-01-25 06:03:57

标签: java hibernate

我正在学习本书Java Persistence with Hibernate,在第24页的PDF版本中有一个声明如下:

UserTransaction tx = TM.getUserTransaction();

我不知道TM来自哪里。我用谷歌搜索了一段时间但找不到任何答案。因此,我无法在Netbeans中运行我的代码。

我还可以在代码中的某处看到JPA。这也意味着什么?

感谢您的帮助

整个代码是:

public class HelloWorldJPA {

    public static void main(String[] args){
        try {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("HelloWorldPU");

            UserTransaction tx = TM.getUserTransaction();
            try {
                tx.begin();
            } catch (NotSupportedException | SystemException ex) {
                Logger.getLogger(HelloWorldJPA.class.getName()).log(Level.SEVERE, null, ex);
            }

            EntityManager em = emf.createEntityManager();

            Message message = new Message();
            message.setText("Hello World!");

            em.persist(message);

            tx.commit();

            em.close();
        } catch (HeuristicMixedException | HeuristicRollbackException | IllegalStateException | RollbackException | SecurityException | SystemException ex) {
            Logger.getLogger(HelloWorldJPA.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您问题的精确解决方案

  1. TM绝对是一个实例变量,通常为每个测试套件的单个数据库连接管理器设置

  2. 请从此link

  3. 下载图书源代码
  4. 查找TransactionManagerTest.java类

  5.   

    公共类TransactionManagerTest {

    // Static single database connection manager per test suite
    static public TransactionManagerSetup TM;
    
    @Parameters({"database", "connectionURL"})
    @BeforeSuite()
    public void beforeSuite(@Optional String database,
                            @Optional String connectionURL) throws Exception {
        TM = new TransactionManagerSetup(
            database != null
                ? DatabaseProduct.valueOf(database.toUpperCase(Locale.US))
                : DatabaseProduct.H2,
            connectionURL
        );
    }
    
    @AfterSuite(alwaysRun = true)
    public void afterSuite() throws Exception {
        if (TM != null)
            TM.stop();
    }
    

    }

    你会得到答案: - )

    1. 我总是建议通过manning出版网站在线获取源代码,以便更好地理解。他们还在official site中上传了与当前上下文相关的源代码。