Có cách nào để khởi tạo EntityManagermà không có đơn vị bền bỉ được xác định không?
Bạn nên xác định ít nhất một đơn vị độ bền trong bộ persistence.xmlmô tả triển khai.
Bạn có thể cung cấp tất cả các thuộc tính cần thiết để tạo một Entitymanager?
- Thuộc tính tên là bắt buộc. Các thuộc tính và phần tử khác là tùy chọn. (Đặc tả JPA). Vì vậy, đây ít nhiều phải là
persistence.xmltệp tối thiểu của bạn :
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
SOME_PROPERTIES
</persistence-unit>
</persistence>
Trong môi trường Java EE, các phần tử jta-data-sourcevà non-jta-data-sourceđược sử dụng để chỉ định tên JNDI chung của nguồn dữ liệu JTA và / hoặc không phải JTA sẽ được sử dụng bởi nhà cung cấp lâu dài.
Vì vậy, nếu Máy chủ ứng dụng mục tiêu của bạn hỗ trợ JTA (JBoss, Websphere, GlassFish), bạn persistence.xmlsẽ trông giống như sau:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<jta-data-source>jdbc/myDS</jta-data-source>
</persistence-unit>
</persistence>
Nếu Máy chủ ứng dụng mục tiêu của bạn không hỗ trợ JTA (Tomcat), bạn persistence.xmlsẽ trông giống như sau:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<non-jta-data-source>jdbc/myDS</non-jta-data-source>
</persistence-unit>
</persistence>
Nếu nguồn dữ liệu của bạn không bị ràng buộc với JNDI chung (ví dụ: bên ngoài vùng chứa Java EE), thì bạn thường sẽ xác định các thuộc tính JPA nhà cung cấp, trình điều khiển, url, người dùng và mật khẩu. Nhưng tên tài sản phụ thuộc vào nhà cung cấp JPA. Vì vậy, đối với Hibernate với tư cách là nhà cung cấp JPA, persistence.xmltệp của bạn sẽ giống như sau:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.com.persistence.SomeClass</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/EmpServDB;create=true"/>
<property name="hibernate.connection.username" value="APP"/>
<property name="hibernate.connection.password" value="APP"/>
</properties>
</persistence-unit>
</persistence>
Thuộc tính loại giao dịch
Nói chung, trong môi trường Java EE, kiểu giao dịch RESOURCE_LOCALgiả định rằng một nguồn dữ liệu không phải JTA sẽ được cung cấp. Trong môi trường Java EE, nếu phần tử này không được chỉ định, thì mặc định là JTA. Trong môi trường Java SE, nếu phần tử này không được chỉ định, thì giá trị mặc định RESOURCE_LOCALcó thể được giả định.
- Để đảm bảo tính di động của ứng dụng Java SE, cần phải liệt kê rõ ràng các lớp độ bền được quản lý được bao gồm trong đơn vị độ bền (đặc tả JPA)
Tôi cần tạo EntityManagertừ các giá trị được chỉ định của người dùng trong thời gian chạy
Vì vậy, hãy sử dụng cái này:
Map addedOrOverridenProperties = new HashMap();
addedOrOverridenProperties.put("hibernate.show_sql", true);
Persistence.createEntityManagerFactory(<PERSISTENCE_UNIT_NAME_GOES_HERE>, addedOrOverridenProperties);