条目中的Set类型是什么

时间:2010-11-09 07:37:29

标签: hibernate associations set

我在db中有两个表,一个拥有另一个的外键,fllowing是架构:

// table featureInfo

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for featureinfo
-- ----------------------------
DROP TABLE IF EXISTS `featureinfo`;
CREATE TABLE `featureinfo` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `globalId` int(11) NOT NULL DEFAULT '0',
  `name` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`Id`),
  KEY `globalId` (`globalId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

//另一个表featurefix

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for featurefix
-- ----------------------------
DROP TABLE IF EXISTS `featurefix`;
CREATE TABLE `featurefix` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `globalId` int(11) NOT NULL DEFAULT '0',
  `modifyname` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`Id`),
  KEY `FK-Guid` (`globalId`),
  CONSTRAINT `FK-Guid` FOREIGN KEY (`globalId`) REFERENCES `featureinfo` (`globalId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后我使用hbm2java创建入口类:

public class Featureinfo implements java.io.Serializable {

    private Integer id;
    private int     globalId;
    private String  name;
    private Set     featurefixes    = new HashSet(0);

    public Featureinfo() {}
}

现在我想知道为什么FeatureInfo中有set属性?

Featureinfo.hbm.xml:

<hibernate-mapping>
    <class name="com.pojo.Featureinfo" table="featureinfo" catalog="hibernateset">
        <id name="id" type="java.lang.Integer">
            <column name="Id" />
            <generator class="identity" />
        </id>
        <property name="globalId" type="int">
            <column name="globalId" not-null="true" />
        </property>
        <property name="name" type="string">
            <column name="name" not-null="true" />
        </property>
        <set name="featurefixes" inverse="true">
            <key>
                <column name="globalId" not-null="true" />
            </key>
            <one-to-many class="com.pojo.Featurefix" />
        </set>
    </class>
</hibernate-mapping>

set元素是定义的,为什么不使用“joined-subclass”呢?

映射xml文件中的“set / map / list / idbag”和“one-to-many / many-to-one”有什么区别?

1 个答案:

答案 0 :(得分:0)

hbm2java将FeatureFix中的外键解释为FeatureInfo。这是它的自然交织。在简单阅读数据库时,FeatureInfo和FeatureFix之间存在一对多的关系,因此hbm2java会像这样呈现类。

hbm2java使用集合,因为这是最简单的映射解决方案,因此是默认值。

hbm2java无法区分连接子类结构和数据库级别的简单一对多结构之间的区别,因为它们呈现的相同,因此它与典型的一对一:一对多。连接子类的使用不如一对多。