Hibernate传递集合映射

时间:2013-07-03 08:46:12

标签: java hibernate

我正在使用Hibernate 3.6版本,带有xml映射文件。在我的例子中,我有三个映射实体,分别是检测器天线位置。基本上,有Detector - &gt; Set<Antenna>Location - &gt; Set<Antenna>关系,我希望Detector - &gt; {{1}可用。

每个探测器都有一组天线实体,映射如下:

Set<Location>

每个天线也属于特定的位置和特定的探测器。这是多对一映射,用于引用:

<set name="_Antennas" table="tantenna" inverse="true" cascade="all">
    <key>
        <column name="id_detector" not-null="true" />
    </key>
    <one-to-many class="Antenna" />
</set>

同样,位置有一组天线:

<many-to-one name="_Detector" class="com.tadic.model.detector.Detector"
            column="id_detector" />

<many-to-one name="_Location" class="com.tadic.model.location.Location"
            column="id_location" />

所以探测器知道它的天线,天线知道它们的探测器和位置。位置实体有一组天线,但 tlocation 表没有外键。

但是,我有兴趣知道某个特定点的探测器的所有位置。我知道我可以编写HQL,但是我想知道当Detector加载时这是否可行,只是将其映射为一组位置实体。

请记住 tlocation 表没有 iddetector 列来链接它,我认为没有必要。

1 个答案:

答案 0 :(得分:2)

如果我从数据库点得到它

tdetector [1] - [id_detector] - &gt; [n] tantenna

tlocation [1] - [id_location] - &gt; [m] tantenna

含义tantenna有一个列元组(id_detector,id_location),实际上是tdetector和tlocation之间的链接表。这可用于促进探测器和位置之间的多对多映射。

这是Detector hibernate映射的映射片段。

<set name="locations" table="tantenna">
    <key column="id_detector" />
    <many-to-many class="com.tadic.model.location.Location" column="id_location" />
</set>

还有一件事。根据我的经验,在ORM上映射这种复杂的关系方案并非没有成本。即使hibernate在会话工厂初始化期间发现您的映射文件没问题,我也建议您进行彻底测试,并在必要时使用insert =“false”update将某些关系指定为只读(即仅在读取数据时有用) = “假”。