2009-06-07 23 views
14

Sau đây không hoạt động:Hibernate: Được sử dụng mappedBy trên lớp mở rộng một lớp khác được chú thích là lớp JoinSubclass?

@Entity 
class Owner { 

    @OneToMany(mappedBy="owner", cascade = {CascadeType.ALL}) 
    protected Set<B> getBSet() { 
    .. 
    } 

} 

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 
class A { 
    @ManyToOne 
    public Owner getOwner() { 
    ... 
    } 
} 

@Entity 
class B extends A { 

} 

Nó gây ra một ngoại lệ như vậy: org.hibernate.AnnotationException: mappedBy tham khảo một tài sản thực thể mục tiêu không rõ: B.user trong chủ căn hộ.

Tôi đang cố gắng tránh sao chép thuộc tính "chủ sở hữu" vào lớp B (do đó sẽ "không chuẩn hóa" và sao chép khóa chủ sở hữu vào cả hai bảng được tạo cho thực thể A và B). Ngoài ra, tôi thực sự muốn có A và B trong một bảng riêng biệt và không phải sử dụng một phân biệt đối xử bằng cách sử dụng kế thừa SingleTable.

Ngoài ra, tôi không thể tìm ra cách làm điều gì đó tương tự bằng cách sử dụng @OneToOne giữa A và B (và không có B mở rộng A).

Trả lời

0

Tôi muốn kiểm tra lại việc triển khai thực sự của bạn. Tôi đã sử dụng mã mẫu của bạn và sau khi thêm một @Id mọi thứ hoạt động như mong đợi. Ngay cả IntelliJ nói getBSet() có liên quan với B.owner.

+0

Bạn có thực sự chạy nó và tạo Nhà máy phiên không? Cảm ơn - Tôi sẽ kiểm tra lại. Tôi đã không sử dụng chính xác cùng một mã này - tôi chỉ lấy từ một ví dụ thực sự mà tôi đã làm điều tương tự ... – GreenieMeanie

+0

Vâng tôi đã chạy nó. Đó là lý do tôi đề cập đến @ID. SF phàn nàn về @id bị thiếu. Sau đó SF xây dựng được. Tôi có thể thề rằng tôi đã gõ câu đó, hah! Chúc may mắn! – danieljimenez

6

Thử thêm targetEntity = Transaction.class. Điều này làm việc cho tôi khi tôi đang sử dụng kế thừa SINGLE_TABLE. Tôi đã không thử nó với JOIN.

@Entity 
class Owner { 

    @OneToMany(mappedBy="owner", cascade = {CascadeType.ALL}, targetEntity = Transaction.class) 
    @Where(clause = "tableType='I'") 
    protected Set<B> getBSet() { 
    .. 
    } 

} 
+0

Hoạt động như một sự quyến rũ cho tôi (Tôi đang sử dụng 'InheritanceType.TABLE_PER_CLASS') – Numbernick

10

Đó là sự kỳ quặc của Hibernate, nhưng nó có chủ ý. Tôi có một số blog post với thông tin cơ bản, liên kết và giải pháp cho giải pháp JOINED.

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