2013-10-17 15 views
5

Tôi đang sử dụng chế độ ngủ đông Criteria lớp để có được tất cả hồ sơ của bảng:Nhận tên cột bảng trong Hibernate

Criteria criteria = session.createCriteria(AppTaskConfig.class) 

Tôi muốn để có được tên cột cũng như tôi cần phải chuyển đổi kết quả thiết lập sang định dạng JSON.

+0

Có thể tham khảo tại đây http://stackoverflow.com/q/2023700/366964 có thể hữu ích. –

Trả lời

0

Tên cột của thực thể là gì? Thực thể có thể sử dụng một số cột của bảng và không có trường nào khác.

Thực thể có thể mở rộng một lớp Entity khác để các trường của lớp Entity được đại diện bởi các cột từ các bảng khác nhau.

Bạn có thể chạy truy vấn SQl gốc và xem cột bảng.

13

Để có được column names, trước tiên bạn cần phải tìm ra properties của đơn vị sử dụng org.hibernate.metadata.ClassMetadata:

ClassMetadata classMetadata = sessionFactory.getClassMetadata(AppTaskConfig.class); 
String[] propertyNames = classMetadata.getPropertyNames(); 

nơi propertyNames là một mảng của Strings đại diện cho tên thuộc tính của AppTaskConfig.

Bây giờ sử dụng Hibernate org.hibernate.cfg.Configuration đối tượng bạn có thể tìm thấy các tên cột của properties:

for (String property : propertyNames) { 
    Configuration configuration = sessionFactoryBean.getConfiguration(); 
    PersistentClass persistentClass = configuration 
        .getClassMapping(Details.class.getName()); 
    String columnName = ((Column) persistentClass.getProperty(property) 
        .getColumnIterator().next()).getName(); 
} 
+2

sessionFactoryBean ở đây là gì? Tôi không nghĩ rằng đó là sessionFactory. – instanceOfObject

+2

@instanceOfObject, Vui lòng kiểm tra liên kết https://developer.jboss.org/thread/189593?start=0&tstart=0 – Stony

+1

@ Saikai trong khi làm theo cách tiếp cận này, chúng tôi không nhận được các chi tiết chính chính. Vui lòng cung cấp thêm một giải pháp. –

0
String[] columnNames = getSessionFactory().getClassMetadata(Employee.class).getPropertyNames(); 

    org.hibernate.type.Type[] columnTypes = getSessionFactory().getClassMetadata(Employee.class).getPropertyTypes(); 

thử này đây là công việc đúng ...

0

Bạn có thể sử dụng Reflection API để truy cập vào tuyên bố JPA được khai báo của một trường/getter như Column o JoinColumn.

import javax.persistence.Column; 
import javax.persistence.JoinColumn; 

// get declared field 
Field field = persistentClass.getDeclaredField("property"); 

// get declared method 
Method method = persistentClass.getMethod("get"+property.substring(0,1).toUpper()+property.substring(1))); 

// access to declared annotations or field or method to find Column or JoinColumn 
Các vấn đề liên quan