Có cách nào để khởi tạo EntityManager
mà không có đơn vị liên tục được xác định không?
Bạn nên xác định ít nhất một đơn vị kiên trì trong mô tả persistence.xml
triển khai.
Bạn có thể cung cấp tất cả các thuộc tính bắt buộc để tạo một Entitymanager
không?
- 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 điểm kỹ thuật JPA). Vì vậy, điều này nên được nhiều hơn hoặc ít hơn mức tối thiểu của bạn
persistence.xml
file:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
SOME_PROPERTIES
</persistence-unit>
</persistence>
Trong môi trường Java EE, các jta-data-source
và non-jta-data-source
yếu tố được sử dụng để xác định tên JNDI toàn cầu của JTA và/hoặc phi Nguồn dữ liệu JTA sẽ được nhà cung cấp kiên trì sử dụng.
Vì vậy, nếu bạn máy chủ mục tiêu ứng dụng hỗ trợ JTA (JBoss, Websphere, GlassFish), persistence.xml
của bạn trông giống như:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<!--GLOBAL_JNDI_GOES_HERE-->
<jta-data-source>jdbc/myDS</jta-data-source>
</persistence-unit>
</persistence>
Nếu Server của bạn mục tiêu ứng dụng không hỗ trợ JTA (Tomcat), persistence.xml
vẻ của bạn như:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<!--GLOBAL_JNDI_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 toàn cầu (ví dụ, bên ngoài thùng chứa Java EE), vì vậy bạn thường định nghĩa nhà cung cấp JPA, trình điều khiển, u thuộc tính rl, người dùng và mật khẩu. Nhưng tên thuộc tính tùy thuộc vào nhà cung cấp JPA. Vì vậy, đối với Hibernate là nhà cung cấp JPA, persistence.xml
tập tin của bạn sẽ trông giống như:
<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>
Loại giao dịch Thuộc tính
Nói chung, trong môi trường Java EE, một giao dịch loại RESOURCE_LOCAL
giả định rằng một phi Nguồn dữ liệu 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, mặc định là JTA. Trong môi trường Java SE, nếu phần tử này không được chỉ định, mặc định là RESOURCE_LOCAL
có thể được giả định.
- Để đảm bảo tính di động của một ứng dụng Java SE, nó là cần thiết để một cách rõ ràng danh sách các lớp kiên trì quản lý được bao gồm trong các đơn vị bền vững (JPA đặc điểm kỹ thuật)
tôi cần tạo EntityManager
từ giá trị được chỉ định của người dùng tại thời gian chạy
Vì vậy, sử dụng này:
Map addedOrOverridenProperties = new HashMap();
// Let's suppose we are using Hibernate as JPA provider
addedOrOverridenProperties.put("hibernate.show_sql", true);
Persistence.createEntityManagerFactory(<PERSISTENCE_UNIT_NAME_GOES_HERE>, addedOrOverridenProperties);
Hi Tôi cố gắng giải pháp của bạn, nhưng gặp sự cố, bạn có thể xin vui lòng kiểm tra câu hỏi của tôi: http://stackoverflow.com/ câu hỏi/3935394/how-to-externalize-properties-from-jpas-persistence-xml – stacker
@stacker Tôi đang kiểm tra –