Tôi đang cố gắng ánh xạ hai đối tượng với nhau bằng cách sử dụng liên kết ManyToMany
, nhưng vì một số lý do khi tôi sử dụng thuộc tính mappedBy, hibernate dường như bị nhầm lẫn về chính xác những gì tôi đang lập bản đồ. Điều kỳ lạ duy nhất về ánh xạ của tôi ở đây là liên kết không được thực hiện trên một trường khóa chính trong một trong các mục nhập (trường này là duy nhất mặc dù).Hibernate không bằng cách thêm tên lớp đủ điều kiện vào tên thuộc tính trên liên kết ManyToMany
Các bảng là:
Sequence (
id NUMBER,
reference VARCHAR,
)
Project (
id NUMBER
)
Sequence_Project (
proj_id number references Project(id),
reference varchar references Sequence(reference)
)
Đối tượng trông giống như (chú thích trên getter, đặt chúng trên các lĩnh vực để ngưng tụ một chút):
class Sequence {
@Id
private int id;
private String reference;
@ManyToMany(mappedBy="sequences")
private List<Project> projects;
}
Và phía bên sở hữu:
class Project {
@Id
private int id;
@ManyToMany
@JoinTable(name="sequence_project",
[email protected](name="id"),
[email protected](name="reference",
referencedColumnName="reference"))
private List<Sequence> sequences;
}
Điều này không thành công với MappingException:
tài sản ref [_test_local_entities_Project_sequences] không tìm thấy trên thực thể [test.local.entities.Project]
Nó có vẻ thật là thú vị thêm vào trước tên lớp đầy đủ, chia cho dấu gạch dưới. Làm thế nào tôi có thể tránh điều này xảy ra?
CHỈNH SỬA: Tôi đã chơi trò chơi này nhiều hơn một chút. Thay đổi tên của thuộc tính mappedBy ném một ngoại lệ khác nhau, cụ thể là:
org.hibernate.AnnotationException: mappedBy tham khảo một tài sản thực thể mục tiêu không rõ: test.local.entities.Project.sequences
Vì vậy, chú thích được xử lý chính xác, nhưng bằng cách nào đó tham chiếu thuộc tính không được thêm chính xác vào cấu hình bên trong của Hibernate.
Có vẻ như một SQ nhưng dự án có getSequences công cộng và setSequences cộng đồng về nó? – Affe
@Affe Tôi sẽ doublecheck, tôi nghĩ rằng hiện tại nó là công cộng/bảo vệ. – wds
Chỉ trong trường hợp, điều gì sẽ xảy ra nếu bạn đổi tên thuộc tính 'chuỗi ký tự 'thành một thứ khác, ví dụ: 'foo'? –