Tôi có mã kế thừa mà tôi đang cố gắng ánh xạ tới mã mới.Lập bản đồ Hibernate cho các phép nối phức tạp
OLD_PERSON
pid
sid
name
age
NEW_PERSON
pid
sid
fid
age
RESOLVE_PERSON
pid
fid
status
Java lớp
domain.Person {
ID _id;
String _name;
Integer _age;
}
Trong thế giới di sản, chỉ có một bảng: OLD_TABLE. Lập bản đồ ngủ đông rất đơn giản, chỉ một lớp và các cột của nó. Trong thế giới mới, tôi phải sử dụng 3 bảng trên và tạo một Thực thể có tên đến từ OLD_PERSON và tuổi từ NEW_PERSON. Vì vậy, về cơ bản một truy vấn SQL là:
select op.name as name, np.age as age
from OLD_PERSON op
INNER JOIN RESOLVE_PERSON rp
on rp.pid = op.pid
INNER JOIN NEW_PERSON np
on np.pid = rp.pid and np.fid = rp.fid and np.sid = op.sid
where rp.status = 'CURRENT'
Khi nghiên cứu/googling tôi thấy rằng tôi có thể sử dụng "Bảng phụ" tương đương với "JOIN table" trong ngủ đông xml. Lưu ý: Tôi không thể sử dụng chú thích vì mã này cũ và tôi vẫn ở chế độ ngủ đông.
Vì vậy, tôi đã thêm một bảng tham gia bên trong tập tin bản đồ của tôi:
<class name="domain.Person" table="OLD_PERSON">
<composite-id name="_id" class="Id">
<key-property access="property" name="key1" type="long" column="pid" />
<key-property access="property" name="key2" type="int" column="sid" />
<generator class="assigned" />
</composite-id>
<property name="_Name" type="String" column="name" />
<join table="NEW_PERSON" fetch="join" inverse="false">
<key>
<column name="pid" />
<column name="sid" />
</key>
<property name="_age" column="age" not-null="true" />
</join>
</class>
Nhưng tham gia vào NEW_PERSON bảng đòi hỏi một bên tham gia với RESOLVE_PERSON bảng. Tôi đã thử sử dụng subselect nhưng không phải là điều đúng để sử dụng. Tôi không thể cắm vào công thức ở bất kỳ đâu tại đây.
Mọi gợi ý về cách thức này có thể đạt được? Những gì tôi về cơ bản yêu cầu là làm thế nào để áp dụng một tiêu chí/ràng buộc kiểm tra trên JOIN.