2012-07-03 24 views
5

Tôi có hai thực thể:JPA: làm thế nào để tổng hợp một thực thể từ các cột của nhiều bảng (không tiết kiệm một thực thể để bảng mulitple)

@Entity 
@Table(name="TableA") 
public class TableA { 
    @Id 
    @Column(name="id") 
    long id; 

    @Column(name="tableB_id") 
    long tbId; 

    @Column(name="column1", table="TableB") 
    String tbColumn1; 
} 

@Entity 
@Table(name="TableB") 
public class TableB { 
    @Id 
    @Column(name="id") 
    long id; 

    @Column(name="column1") 
    String column1; 
} 

TableA có một chìa khóa nước ngoài tbId 'để TableB.id. Và TableB có một cột có tên là "column1", bây giờ tôi muốn nhận được "column1" trong thực thể TableA bởi một số loại tham gia. Tôi nên đi theo JPA như thế nào? Đây không phải là OneToOne vì tôi không muốn dây toàn bộ thực thể TableB trong TableA.

+0

Bạn có xem xét cơ sở dữ liệu VIEW hoặc JPA Construct Query không? – JMelnik

+0

Bạn chỉ muốn sử dụng nó cho Đọc, chứ không phải Sửa đổi, phải không? – JMelnik

+0

Tôi nghĩ bạn cần chú thích @SecondaryTable: http://en.wikibooks.org/wiki/Java_Persistence/Tables#Multiple_tables – McIntosh

Trả lời

10

Nếu bạn muốn cột nhóm trong một đối tượng duy nhất cho việc đọc dữ liệu tôi đề nghị bạn hai cách:

  1. Tạo DB XEM và bản đồ nó như là một thực thể.
  2. Sử dụng Result Classes Constructor Expression, nó sẽ khởi tạo và điền các đối tượng của lớp được cung cấp dựa trên kết quả truy vấn trả về.

Từ ObjectDB trên Result Lớp Constructor Biểu hiện:

JPA hỗ trợ gói kết quả truy vấn JPQL với các trường hợp tùy chỉnh lớp kết quả. Điều này chủ yếu là hữu ích cho các truy vấn với nhiều biểu thức SELECT , trong đó các đối tượng kết quả tùy chỉnh có thể cung cấp một đối tượng thay thế theo định hướng để biểu diễn kết quả dưới dạng các phần tử Object [].

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