2

私がEclipseLinkに行き詰まるのは数週間になるでしょう。データベースにオブジェクトを永続化できません。私はネットビーンズ7.3を使用しています。Web アプリケーションの設計を開始したときに、この問題に遭遇しました。以下は、私が採用したアプローチです。間違いに気付かずにやっているのかもしれません。

その後、netbeans がプロジェクト ファイルの生成を完了した後、jndi を構成しました。次に、エンティティ オブジェクトのデータベース テーブルである netbeans で自動的に変換しました。 ここにリンクがあります

次に、これらのクラスから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>

あなたの将来があなたの答えにあり、追加情報を聞いてくれてありがとう.

4

2 に答える 2

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>
于 2013-05-20T11:59:56.850 に答える
0

データベースに何かが書き込まれる前に、トランザクションをコミットまたはフラッシュする必要があります。IDENTITY シーケンスを使用している場合 (IDENTITY を使用しないことを強くお勧めします。DB がサポートしている場合は TABLE または SEQUENCE を使用してください)、ID は挿入が発生するまで割り当てられないため、persist() は ID を割り当てません ( TABLE および SEQUENCE)。

create() メソッドは何をしますか? ID はどのようにマッピングされていますか?

于 2013-05-21T15:18:25.047 に答える