我正在尝试使用hibernate创建一个hbm.xml来映射java中的一些持久对象。
My Domain看起来像这样:
属性有文件夹,其中有文件夹。 属性有一个键可以找到文件夹,文件夹有一个键可以找到它的根文件夹。
public class Property {
private Folder folder;
private Set<Folder> rootFolders;
}
public class Folder {
private String id;
private String rootfolder;
private String descriptor;
}
现在有一个 Folder.hbm.xml (以及 Folder.java ),但我无法更改它,我无法在那里添加引用(不可触及的遗产)。所以我无法在那里添加根列表。
我想直接在 Property 中添加它,因此 Property 有两个字段,文件夹和 rootFolders
我尝试使用 join 和 set (请参阅下面的内容),但我无法让Hibernate创建正确的Query ... 所以我的问题是:映射是否可行(我不想使用HQL),它会是什么样子?
编辑:我发现文件夹中有一个文件夹列表(并相应更改了说明)。 我到目前为止的代码是:
<set name="rootFolders" table="FOLDER">
<key column="ID" property-ref="folder.id"/>
<many-to-many
column="ROOTFOLDER"
class="org.company.Folder"
property-ref="descriptor"
/>
</set>
我已将文件夹映射到属性(并将其命名为文件夹)。 文件夹有一列 ROOTFOLDER ,它映射文件夹的 DESCRIPTOR (虽然它不是主键!)
此外,我尝试使用SQL进行必要的检索(只是为了确保它是可能的):
from
(select t.logical_id, t.id, t.tariffroot from (PROPERTY p inner join FOLDER f on p.FOLDER_ID = f.ID)) propertyFolders
inner join FOLDER roots on propertyFolders.FOLDERROOT= roots.DESCRIPTOR