2009-12-24 52 views

Trả lời

7

Chú thích là không đủ vì hibernate không biết nơi các lớp chú thích của bạn sống mà không có một số loại khai báo rõ ràng. Theo lý thuyết, nó có thể quét từng lớp đơn trong classpath và tìm chú thích nhưng điều này sẽ rất tốn kém cho các dự án lớn hơn.

Bạn có thể sử dụng lò xo có trình trợ giúp có thể cho phép bạn chỉ định (các) gói mà các đối tượng ngủ đông của bạn đang ở và nó sẽ quét các gói này cho @Entity. Nếu bạn có tất cả các đối tượng của bạn trong một số lượng nhỏ các gói cố định thì nó hoạt động tốt.

Ví dụ:

<bean id="referenceSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="packagesToScan"> 
     <array> 
     <value>com.xxx.hibernate.objects</value> 
     </array> 
    </property> 
    </bean> 

Ở trên là khai báo mùa xuân. Nếu bạn không quen thuộc với cú pháp trên, bạn chỉ có thể xây dựng nó theo lập trình.

AnnotationSessionFactoryBean sfb = new AnnotationSessionFactoryBean(); 
sfb.setDataSource(ds); 
sfb.setHibernateProperties(hibProps); 
sfb.setPackagesToScan(...); 
sfb.initialise(); 
SessionFactory sf = sfb.getObject(); 

Nó hỗ trợ một loạt tùy chọn cấu hình để bạn có thể sử dụng thuộc tính thô hoặc chuyển nguồn dữ liệu đã định cấu hình trước.

+0

Bạn cũng có thể sử dụng 'LocalSessionFactoryBean' những ngày này, trong đó hỗ trợ việc cung cấp một file' hibernate.cfg.xml' trong trường hợp bạn cần một trong những. Tôi không chắc chắn phiên bản nào của mùa xuân này đã đạt được phương thức 'setPackagesToScan', nhưng chắc chắn nó đã có một phiên bản. – Jules

3

Bạn không nếu bạn đặt thuộc tính hibernate.archive.autodetection thành true. Có một vấn đề về hiệu suất ở đây vì Hibernate sẽ tìm kiếm các tệp jar cho chú giải JPA. Lưu ý rằng, nó cũng sẽ khởi tạo các lớp đó.

2

Có :)

File hibernate.cfg.xml không được sử dụng để xác định các đối tượng của bạn, nó được sử dụng để cấu hình những thứ như các thông số kết nối của Hibernate và các thiết lập toàn cầu. Tệp hibernate.cfg.xml cũng chứa hướng dẫn về cách xác định các thực thể. Bạn có thể liệt kê các tệp ánh xạ XML bằng cách sử dụng <mapping resource=XYZ>, nhưng nếu bạn đang sử dụng các chú thích JPA như @Entity, thì điều này là không cần thiết, Hibernate sẽ tự động phát hiện chúng.

Bạn có thể trộn chú thích và ánh xạ XML nếu bạn chọn, nhưng điều đó không cần thiết trong hầu hết các trường hợp.

+1

"nếu bạn đang sử dụng chú thích JPA như @Entity, thì điều này là không cần thiết, Hibernate sẽ tự động phát hiện chúng" - Nó khá rõ ràng không làm như vậy theo mặc định. Tôi nhận được ngoại lệ loại thực thể chưa đăng ký nếu tôi không nói về các lớp này (tôi sử dụng 'AnnotationConfiguration.addAnnotatedClass' để nói về chúng theo cách lập trình). Không chắc mình đang làm gì sai, nhưng điều này không hoàn toàn tự động. – Jules

1

Theo mặc định tất cả các chú thích đúng lớp và tất cả các file hbm.xml tìm thấy bên trong các kho lưu trữ được thêm vào cấu hình đơn vị kiên trì. Bạn có thể thêm một số thực thể bên ngoài thông qua phần tử lớp học.

Hibernate EntityManager Reference Docs

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