Để xác thực dữ liệu tôi nhận được, tôi cần đảm bảo rằng độ dài sẽ không vượt quá độ dài cột cơ sở dữ liệu. Bây giờ tất cả các thông tin chiều dài được lưu trữ trong các tập tin bản đồ Hibernate, có anyway để truy cập thông tin này lập trình?Lấy chiều dài cột từ ánh xạ Hibernate?
Trả lời
Bạn có thể truy cập nó nhưng không dễ dàng. Bạn có thể muốn làm một cái gì đó như dưới đây lúc khởi động và lưu trữ một bộ nhớ cache tĩnh của các giá trị. Có rất nhiều trường hợp đặc biệt để xử lý (thừa kế, vv), nhưng nó sẽ làm việc cho ánh xạ một cột đơn giản. Tôi có thể đã bỏ qua một số kiểm tra instanceof và null.
for (Iterator iter=configuration.getClassMappings(); iter.hasNext();) {
PersistentClass persistentClass = (PersistentClass)iter.next();
for (Iterator iter2=persistentClass.getPropertyIterator(); iter2.hasNext();) {
Property property = (Property)iter2.next();
String class = persistentClass.getClassName();
String attribute = property.getName();
int length = ((Column)property.getColumnIterator().next()).getLength();
}
}
Tôi sẽ phải thử cái này, cảm ơn Brian. –
Dựa trên câu trả lời của Brian, đây là những gì tôi đã kết thúc.
private static final Configuration configuration = new Configuration().configure();
public static int getColumnLength(String className, String propertyName) {
PersistentClass persistentClass = configuration.getClassMapping(className);
Property property = persistentClass.getProperty(propertyName);
int length = ((Column) property.getColumnIterator().next()).getLength();
return length;
}
Điều này có vẻ hoạt động tốt. Hy vọng điều này là hữu ích cho bất cứ ai tình cờ khi câu hỏi này.
Với Hibernate 5 lấy PersistentClass như thế này (thay vì thông qua Configuration): 'StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder(). Configure (" hibernate.cfg.xml "). Build(); Siêu dữ liệu metaData = new MetadataSources (standardRegistry) .getMetadataBuilder(). Build(); Danh sách
Đôi khi có thể có vấn đề khi nhận đối tượng Cấu hình (nếu bạn đang sử dụng một số khung ứng dụng và bạn không tự tạo nhà máy phiên sử dụng Cấu hình).
Nếu bạn đang sử dụng ví dụ Spring, bạn có thể sử dụng LocalSessionFactoryBean (từ applicationContext của bạn) để lấy đối tượng Configuration. Sau đó, lấy chiều dài cột chỉ là miếng bánh;)
factoryBean.getConfiguration().getClassMapping(String entityName) .getTable().getColumn(Column col).getLength()
Tuy nhiên, khi tôi cố gắng để truy cập LocalSessionFactoryBean
, tôi phải mất một ngoại lệ lớp diễn viên
LocalSessionFactoryBean factoryBean = (LocalSessionFactoryBean) WebHelper.instance().getBean("sessionFactory");
ngoại lệ:
org.hibernate.impl.SessionFactoryImpl cannot be cast to org.springframework.orm.hibernate3.LocalSessionFactoryBean
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean>
Điều này có vẻ sai lệch ....
EDIT: tìm thấy câu trả lời. Bạn cần phải sử dụng một dấu ở phía trước của chuỗi tên đậu
LocalSessionFactoryBean factoryBean = (LocalSessionFactoryBean) WebHelper.instance().getBean("&sessionFactory");
mô hình phát triển ưa thích của tôi là để căn chiều dài cột vào một hằng số, có thể dễ dàng tham chiếu:
class MyEntity {
public static final int FIELD_LENGTH = 500;
@Column(length = FIELD_LENGTH)
String myField;
...
}
- 1. DÀI làm khóa chính trong ánh xạ Hibernate tới MySQL
- 2. SSIS - ánh xạ cột động
- 3. Cách ánh xạ kiểu Interval trong Hibernate?
- 4. jpa hibernate composite ánh xạ khóa ngoài
- 5. SQLAlchemy - chiều dài cột tối đa
- 6. Ánh xạ Enum từ chuỗi
- 7. Danh sách Ánh xạ hai chiều
- 8. Hibernate trên Oracle: ánh xạ thuộc tính String vào cột CLOB
- 9. org.hibernate.MappingException: Cột lặp lại trong ánh xạ cho thực thể
- 10. Ánh xạ cột NHibernate thông thạo với từ dành riêng
- 11. Hằng số trong các tệp ánh xạ Hibernate
- 12. python/numpy: cách lấy chiều dài cột mảng 2D?
- 13. Ngoại lệ lập bản đồ Hibernate: Cột lặp lại trong ánh xạ cho thực thể
- 14. Ánh xạ nhiều lớp vào bảng trong Hibernate, không có cột DTYPE
- 15. Cách thay đổi ánh xạ cột được nhúng của Grails
- 16. Nhận tên cột của thuộc tính được ánh xạ với Hibernate
- 17. Loại ánh xạ văn bản mysql typ vào java hibernate!
- 18. java, hibernate: ánh xạ thuộc tính với truy vấn
- 19. Sắp xếp theo giá trị bảng ánh xạ trong Hibernate
- 20. Hibernate - làm thế nào để ánh xạ một EnumSet
- 21. Hibernate + Spring MVC: cấu hình ánh xạ đối tượng
- 22. Hibernate một đến số không hoặc một ánh xạ
- 23. Tùy chọn ánh xạ một-một trong Hibernate
- 24. Hibernate DTO và ánh xạ đối tượng giá trị
- 25. Cách ánh xạ cột dấu thời gian thành loại JPA?
- 26. Cách lấy chiều dài Chuỗi
- 27. LINQ to SQL - Chiều dài cột dưới
- 28. Phản ánh mảng chiều dài đa chiều java
- 29. Có gì sai với ánh xạ hai chiều?
- 30. Lưu loát NHibernate một đến nhiều ánh xạ một chiều
Xem thêm http://stackoverflow.com/questions/1816780/ để có giải pháp JPA cho vấn đề này. –