2011-11-28 24 views
5

là có thể truy cập thông tin trong <persistence-unit-metadata> thông qua API Java không?Truy cập JPA <persistence-unit-metadata> theo lập trình

<persistence-unit-metadata> 
    <persistence-unit-defaults> 
     <schema>MySchema</schema> 
    </persistence-unit-defaults> 
</persistence-unit-metadata> 

Tôi muốn đọc schema "MySchema" qua JPA API hoặc EclipseLink API, mà là việc thực hiện tôi sử dụng.

Giống như: entityManager.getDefaults(). GetSchema(); Bạn có thể bỏ hoặc sử dụng bất kỳ lớp EclipseLink nào, điều đó tốt cho việc này.

Cảm ơn bạn

+0

nó là gì mà bạn thực sự muốn đạt được? Bạn có ý gì khi "truy cập thông tin"? Bạn muốn đọc các phần tử của tệp 'orm.xml' của bạn thông qua API nhà cung cấp JPA hoặc có thể bạn muốn đọc lược đồ cơ sở dữ liệu, bảng, thủ tục lưu sẵn, ...? –

+0

Tôi muốn truy cập lược đồ mặc định được định cấu hình trong các giá trị mặc định của thiết bị. Một cái gì đó như jpaConfig.getSchema(). Tôi muốn sử dụng JPA API hoặc EclipseLink. Nhưng không truy cập trực tiếp vào XML, ví dụ thông qua XPath, nếu có thể. – chris1069603

Trả lời

5

Sau khi gỡ lỗi một lúc, tôi tìm thấy giải pháp truy cập giản đồ của thực thể.

EntityType<MyEntity> entity = emf.getMetamodel().entity(MyEntity.class); 

EntityTypeImpl entityTypeImpl = (EntityTypeImpl) entity;   
ClassDescriptor descriptor = entityTypeImpl.getDescriptor(); 

String schema = descriptor.getDefaultTable().getTableQualifier(); 

Tìm kiếm một cách dễ dàng và tốt hơn để truy cập thông tin! Cảm ơn bạn rất nhiều.

+0

Bạn cũng có thể sử dụng, em.unwrap (Session.class) .getDescriptor (MyEntity.class) .getDefaultTable(). GetTableQualifier(); – James

+2

Hoặc để có được vòng loại mặc định trên Phiên, em.unwrap (Session.class) .getLogin(). GetTabl‌ eQualifier(); – James

0

Tôi biết đây là một câu hỏi cũ, nhưng đây là một cách đơn giản hơn để có được những tên bảng:

MyEntity.class.getAnnotation(javax.persistence.Entity.class).name();

0

Các câu trả lời trước đó đã không làm việc cho tôi. Đây là những gì tôi thấy làm việc:

String schema = em.unwrap(JpaEntityManager.class).getServerSession().getDescriptor(MyClass.class).getTables().get(0).getTableQualifier(); 

https://wiki.eclipse.org/EclipseLink/FAQ/JPA

Các vấn đề liên quan