Eski koda, yeni koda eşlemeye çalıştığım eski kodum var.Karmaşık bağlantılar için hazırda bekletme
OLD_PERSON
pid
sid
name
age
NEW_PERSON
pid
sid
fid
age
RESOLVE_PERSON
pid
fid
status
eski dünyada
domain.Person {
ID _id;
String _name;
Integer _age;
}
Java sınıfı, sadece bir masa vardı: OLD_TABLE. Hazırda bekletme eşlemesi basit, yalnızca bir sınıf ve sütunlarıydı. Yeni dünyada, yukarıdaki 3 tabloyu kullanmalı ve adın OLD_PERSON'dan geldiği ve NEW_PERSON'dan itibaren bir varlık üretmem gerekir. Yani temelde bir SQL sorgusu: Araştırma sırasında
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'
/ı hazırda xml "tablosunu JOIN" nin eşdeğerdir "İkincil tabloları" kullanabileceklerini keşfettiler Googling. Not: Bu kod eski ve hala hibernate3.5.6 olduğum için ek açıklama kullanamıyorum.
Yani benim eşleme dosyasının içinde katılmak tablo ekledi:
<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>
Ama NEW_PERSON tablo bir iç RESOLVE_PERSON tablo ile katılmak gerektirir katılmak. subselect kullanmayı denedim, ancak kullanılacak doğru şey değil. Burada herhangi bir yerde formülü'u arayamıyorum.
Bunun nasıl elde edilebileceğine dair herhangi bir işaretçi var mı? Esasen sorduğum, JOIN üzerinde bir ölçüt/kısıtlama kontrolünün nasıl uygulanacağıdır.