2010-11-09 46 views
0

我在DB两个表中的设置类型,以及一个拥有来自另一个外键的fllowing是模式:什么呢在进入

//表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中有一个属性?

而且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元素是定义,为什么不使用 “连接子类” 呢?

映射xml文件中的“set/map/list/idbag”和“一对多/多对一”之间有什么区别?

回答

0

hbm2java正在将FeatureFix中的外键解释为FeatureInfo作为Set。这是它的天然实际行为。在数据库的普通读取中,FeatureInfo和FeatureFix之间存在一对多的关系,因此hbm2java会像这样呈现类。

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

hbm2java无法区分联接子类结构和普通联结结构在数据库级别的许多结构之间的区别,因为它们呈现相同的结果,因此它与典型的结果一致:一对多。联合子类的使用并不像一对多那样多。

+0

谢谢您的回复。你能告诉我这个集合代表什么吗?只是为了一些外键?还有什么是一对多/多对一的关系?我不擅长sql,所以我想知道是否有人可以提供一些指导或文档? – hguser 2010-11-09 10:17:08

+0

该集合在代码中呈现数据库上的一对多数据。数据库上的一对多意味着对于第一个表中的每一行,在另一个表中有许多行。所以在你的情况下,对于FeatureInfo中的每一行,在FeatureFix中可以有很多行。查看http://www.fbeedle.com/sql/029-6ch01.pdf - 可能有所帮助。 – 2010-11-09 13:46:24