JPA: Как создать класс DAO? - PullRequest
       10

JPA: Как создать класс DAO?

1 голос
/ 07 сентября 2011

Я создаю класс DAO следующим образом:

public void Class(Class object){

    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("persistUnit");
    EntityManager entityManager = entityManagerFactory.createEntityManager();

    entityManager.getTransaction().begin();
    entityManager.persist(object);
    entityManager.getTransaction().commit();

    entityManagerFactory.close();
    entityManager.close();

}

Это мой файл 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="persistUnit" transaction-type="RESOURCE_LOCAL">
        //.. classes
        <properties>
            <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://<hostname>:3306/<schema>"/>
            <property name="javax.persistence.jdbc.user" value="<username>"/>
            <property name="javax.persistence.jdbc.password" value="<password>"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

Есть какой-то другой способ сделать такую ​​операцию? Я имею в виду, более сложный?

Я использую Eclipse Indigo и JPA с EclipseLink 2.3.

1 Ответ

2 голосов
/ 07 сентября 2011

Что ж, если вопрос заключается в том, как спроектировать DAO, вы можете найти много документации в разных местах, как в Каталог шаблонов Java EE .

Теперь я не думаю, чтополучите свой код.У вас действительно есть метод с именем "Class"?(Я не думаю, что это возможно, учитывая, что «Класс» является зарезервированным словом, не так ли?)

В любом случае, если имя является правильным и возможным, если этот метод является частью открытого интерфейса вашегоDAO, то вы можете рассмотреть редизайн, основанный на следующих идеях:

Вы не инициализируете фабрику Entity Manager снова и снова в методе, чтобы выполнить только транзакцию.Эта задача довольно дорогая (в вычислительном отношении это означает, что она требует много времени и ресурсов).Поэтому вы обычно инициализируете свою фабрику один раз за время существования приложения и используете ее для создания столько менеджеров сущностей, сколько требуется вашему приложению.

Менеджер сущностей обрабатывается по-разному в зависимости от типа приложения, которым вы являетесьстроительство.Например, приложения Java EE могут использовать преимущества управляемых контейнером транзакций и совместного использования контекста приложения.Предполагая, что ваш код - это код приложения JSE, вы делаете одну из двух вещей: a) вы можете создать одного менеджера сущностей и поделиться им со всеми вашими DAO, или вы можете создать менеджера сущностей для каждого разговора пользователя (чаще всего с помощью транзакции).) и найдите способ внедрить их в свои DAO.

Возможно, вы захотите взглянуть на Google Juice , у них есть удобный способ внедрения Entity Manager и поддержки транзакций для POJO, используя ихинверсия структуры управления.

Возможно, вы захотите проверить этот другой ответ о том, как работает контексты JPA Entity Manager Создает ли метод find () EntityManager новый экземпляр класса JPA?

...