EclipseLink不适用于Netbeans,这是正常的吗?

时间:2013-05-20 00:01:43

标签: jpa eclipselink java-ee-6 jta

我已经厌倦了EclipseLink。我不能在我的数据库中保留一个对象。我使用netbeans 7.3。我开始设计Web应用程序时遇到了这个问题。以下是我采用的方法。可能是我没有意识到错误。

在netbeans完成生成项目文件后,我配置了jndi。然后我自动转换为netbeans,实体对象中的数据库表。 here is the link

然后,从这些课程中,我创建了他们的JPAController。 (始终自动使用netbeans)

最后,作为测试,我只是实例化" Outils"并将字段留空ID。由于后者在数据库中自动递增,如果持久性很好,我在控制台出现时应该有一个id。

<body>
    <h1>Hello World!</h1>
    <%
       Outils o = new Outils();
       o.setDesignation("hammers");

       EntityManagerFactory emf = Persistence.createEntityManagerFactory("Test_EclipseLinkPU");
       UserTransaction utx = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");

       OutilsJpaController o_ctrl = new OutilsJpaController(utx, emf);
       o_ctrl.create(o);

       out.println("this is the id of hammer " + o.toString());
    %>
</body>

我得到的结果是:Outils [id = null]。

我没有错误或者没有关于调试器的更多信息。

Ps:这是persistence.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="Test_EclipseLinkPU" transaction-type="JTA">
        <jta-data-source>test_data_source</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties/>
    </persistence-unit>
</persistence>

感谢您的未来在您的答案中并倾听任何其他信息。

2 个答案:

答案 0 :(得分:0)

(不是真正的答案,但我无法在评论中显示) 要增加日志记录,您的persistence.xml应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="Test_EclipseLinkPU" transaction-type="JTA">
        <jta-data-source>test_data_source</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="eclipselink.logging.level" value="FINE"/>
            <property name="eclipselink.logging.level.sql" value="FINE"/>
            <property name="eclipselink.logging.parameters" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

答案 1 :(得分:0)

在将任何内容写入数据库之前,您需要提交或刷新事务。如果您正在使用IDENTITY排序(我强烈建议不使用IDENTITY,如果db支持它,请使用TABLE或SEQUENCE),然后在插入发生之前无法分配Id,因此persist()不会分配Id(就像它所做的那样)表和序列)。

你的create()方法有什么作用?你的Id如何映射?