Có cách nào để khởi tạo EntityManager
mà 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.xml
mô 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.xml
tệ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-source
và 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.xml
sẽ 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.xml
sẽ 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.xml
tệ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_LOCAL
giả đị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_LOCAL
có 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 EntityManager
từ 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);