2010-04-01 31 views
5

Tôi có một bảng với 11 cột, nhưng tôi cần chỉ nhận được 2 trong số chúng trong ứng dụng của tôi, tôi đang sử dụng kết hợp spring/hibernate/DAO. Bây giờ tôi có một lớp miền bao gồm tất cả 11 trường, và ánh xạ tệp ánh xạ tất cả 11 cột trong bảng. Làm cách nào để sử dụng chỉ nhận được 2 trong số đó không phải tất cả?Nhận ít cột hơn với hibernate

Trả lời

10

Hoặc:

  1. Sử dụng dự báo - Pro: không có gì để thêm - Con: Không an toàn kiểu (kết quả là một List hàng nơi mỗi hàng là một Object[]):

    select f.foo, f.bar from FatEntity f 
    
  2. Sử dụng một biểu thức hàm dựng trong mệnh đề SELECT (lớp được chỉ định không bắt buộc phải là một thực thể hoặc được ánh xạ tới cơ sở dữ liệu) - Pro: giải pháp typesafe - Con: Các lớp khác, trừ khi bạn sử dụng lại FatEntity làm chủ sở hữu nhiều lĩnh vực sẽ null:

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f 
    

    Lưu ý rằng nếu một tên lớp thực thể được quy định tại các khoản SELECT NEW, kết quả các trường hợp thực thể đang trong trạng thái mới (không tính dai dẳng).

  3. Sử dụng một thực thể khác được ánh xạ trên cùng một bảng chỉ với các trường bắt buộc - Pro: Đây là thực thể thực mà bạn có thể sửa đổi và cập nhật - Con: Các lớp khác.

    from LightEntity 
    

Sự khác biệt chính giữa # 2 và # 3 là:

  • 2 không yêu cầu người giữ như là một thực thể nào cả.

  • chủ sở hữu trong # 2 có thể là một thực thể được ánh xạ trên một bảng khác.
  • nếu # 2 trả về các thực thể, chúng ở trạng thái mới (điều này có thể là vấn đề hoặc không).
+0

@Pascal Thivent tôi không thể để lại 2 trường trong lớp miền và tệp ánh xạ của mình? –

+0

@Gandalf Vâng, tôi nghĩ rằng ai đó đang sử dụng các lĩnh vực khác. Nếu điều này không đúng, thì bạn thực sự có thể thay đổi thực thể hiện tại của bạn. –

+0

Cảm ơn bạn đã có nhiều giải pháp và giải thích, làm cách nào để bạn nghĩ ra được điều đó? hết hạn? đọc sách, đào tạo? Tôi sẽ chấp nhận câu trả lời của bạn.nếu bạn có thể chỉ cho tôi đúng hướng nó sẽ là tuyệt vời, như: trang web, ví dụ, sách. –

6

Hãy thử:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity 

Bạn thậm chí có thể làm:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity 

để có được một danh sách mô tả thực thể.

2

Nếu bạn không bao giờ cần nhiều hơn 2 cột trong bảng, bạn có thể thay đổi ánh xạ ngủ đông của bạn để chỉ ánh xạ 2 cột cần thiết đó vào lớp thực thể. Chỉ ánh xạ những cột bảng mà bạn muốn truy cập trong ứng dụng của bạn. Hãy nhớ rằng các ràng buộc cơ sở dữ liệu trên các cột "bị bỏ qua" có thể bị vi phạm như không ràng buộc null, khóa ngoài hoặc ràng buộc duy nhất.

+0

tôi cũng cần có 2 trường trong lớp miền nào? –

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