0

プロジェクト用の JPA アプリケーションを開発しています。私はエクリプスリンクを使用しています。このチュートリアルを見つけましたが、アプリケーションの複雑さには適合しません ここにリンク

データベースのユーザー名、パスワード、および URL の外部ファイルを作成して、データベースのユーザー名とパスワード、またはホスト名を変更するたびに persistence.xml ファイルを変更しないようにしたいと考えています。

これは私が取り組んでいるコードです

Map map = new HashMap();
map.put(PersistenceUnitProperties.JDBC_USER, "root");
map.put(PersistenceUnitProperties.JDBC_PASSWORD, "toor");
map.put(PersistenceUnitProperties.JDBC_URL, "jdbc:mysql://localhost:3306/sad?zeroDateTimeBehavior=convertToNull");
map.put(PersistenceUnitProperties.JDBC_DRIVER, "com.mysql.jdbc.Driver");

上記のコードは例外をスローします

これは私の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="SADPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>sad.entity.Credential</class>
<class>sad.entity.Customer</class>
<class>sad.entity.Employee</class>
<class>sad.entity.HourlyRate</class>
<class>sad.entity.Item</class>
<class>sad.entity.Product</class>
<class>sad.entity.ProductTransaction</class>
<class>sad.entity.Province</class>
<class>sad.entity.Tax</class>
<class>sad.entity.TransactionParticular</class>
<class>sad.entity.WorkingHours</class>
<class>sad.entity.Zero</class>
</persistence-unit>

永続化ユニットを設定した後、エンティティマネージャーを作成しました

Persistence.createEntityManagerFactory("SADPU", map);

プロパティタグを削除して、目的を達成できるかどうかをテストしましたが、例外がスローされました

例外の説明: ドライバー [null]、ユーザー [null]、および URL [null] から接続を取得できません。予期されるドライバー クラスと URL が設定されていることを確認します。ログイン、persistence.xml、または sessions.xml リソースを確認してください。jdbc.driver プロパティは、データベース プラットフォームと互換性のあるクラスに設定する必要があります。

私はそれを間違っていますか?

4

1 に答える 1

0

次のように、ポータブルコントローラークラスを作成できました。

public class SwagJpaController implements Serializable {

    public static final String PERSISTENCE_UNIT = "MyDBPU";

    public SwagJpaController(String database) {
        Map<String, String> properties = new HashMap<String, String>();
        properties.put("javax.persistence.jdbc.url", 
                "jdbc:mysql://localhost:3306/" + database + "?zeroDateTimeBehavior=convertToNull");
        this.emf = Persistence.createEntityManagerFactory(
                SwagJpaController.PERSISTENCE_UNIT, properties);
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }
}

Map.put 呼び出しにハードコードされた文字列としてプロパティ キーを配置し、それが機能するかどうかを確認することをお勧めします。

于 2013-06-11T16:59:38.143 に答える