Person と PersonAudit の 2 つのクラスをマップする必要があります。
public class Person implements Serializable {
private int id;
private String name;
private PersonAudit personAudit;
public Person() {
}
//getters and setters omitted
}
public class PersonAudit implements Serializable {
private int id;
private Person person;
private String name;
private String user;
private Date date;
public PersonAudit() {
}
//getters and setters omitted
}
テーブル PersonAudit は、Person テーブルの履歴変更を保存します。
Person.personAuditプロパティをマップして、Person テーブルに実際には PersonAudit テーブルを参照する列がないことを考慮して、常に最後の監査登録を取得することは可能ですか?
私はEmployee-Employment-Organizationのドキュメントの例(http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#assoc-complex)に従っていますが、従業員の場合にのみ機能するようですテーブルには orgId 列が含まれています。
これまでの Person クラスのマッピングは次のとおりです。
<class catalog="test" name="test.Person" table="Person">
<id name="id" type="int">
<column name="Id"/>
<generator class="increment"/>
</id>
<property name="name" type="string">
<column length="30" name="Name" not-null="true"/>
</property>
<join table="PersonAudit">
<subselect>
select Id,IdPerson
from PersonAudit
group by IdPerson
having Id = max(Id)
</subselect>
<key column="Id" />
<many-to-one name="personAudit" class="test.PersonAudit" column="???"/>
</join>
</class>
したがって、多対 1 は適していません。このシナリオをどのように解決できますか?
よろしくお願いします。