2012-09-11 42 views
5

Tôi đang sử dụng Tìm kiếm Hibernate và tài liệu và sách nói rằng tôi cần @DocumentId trên trường id để Hibernate Search có thể biết cách ánh xạ chỉ mục cho các đối tượng.Yêu cầu @DocumentId cho Tìm kiếm Hibernate?

Mã của tôi có vẻ hoạt động tốt mà không có @DocumentId ở bất kỳ đâu trong mã của tôi. Tìm kiếm Hibernate có đủ thông minh để tìm ra trường @Id đó là mặc định tuyệt vời không? Có vấn đề gì sẽ gây ra điều đó không rõ ràng?

Cảm ơn bạn đã dành thời gian!

Trả lời

4

@DocumentId là bắt buộc nếu bạn đang sử dụng kiểu trường học cũ để ánh xạ các thực thể của bạn với các tệp .hbm.xml. Nếu bạn đang sử dụng phương pháp lập bản đồ và bỏ bê để chú thích một id tài liệu, sau đó lúc khởi động, bạn sẽ thấy một ngoại lệ như thế này:

org.hibernate.search.SearchException: No document id in: com.mypackage.MyEntity 

Tuy nhiên, nếu bạn đang sử dụng các chú thích và đã chú thích một khóa chính với @Id, sau đó bạn không phải sử dụng @DocumentId.

Để được chính xác hơn, các tài liệu Hibernate Tìm kiếm nói rằng @DocumentId là không bắt buộc khi sử dụng JPA chú thích. Vì vậy, có lẽ bạn vẫn sẽ cần phải sử dụng @DocumentId nếu bạn đang sử dụng Hibernate 3.x phong cách chú thích ... Tôi chưa bao giờ thử nghiệm này.

Dù bằng cách nào, Hibernate 4.x deprecates chú thích bản đồ riêng của mình ủng hộ các chú thích JPA-phong cách, ngay cả khi bạn đang sử dụng Session hơn JPA của EntityManager cho truy vấn của bạn Hibernate của. Tóm lại: bạn cần sử dụng @DocumentId nếu bạn đang sử dụng ánh xạ kiểu XML ... trong khi đó là tùy chọn nếu bạn đang sử dụng chú thích, vì tại thời điểm này, bạn nên sử dụng chú thích kiểu JPA.

+0

Tôi nghĩ đây là trường hợp nhưng tôi không thể tìm thấy trong tài liệu. Cảm ơn! – jackcrews

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