что означает тип Set в Entry - PullRequest
       9

что означает тип Set в Entry

0 голосов
/ 09 ноября 2010

У меня есть две таблицы в дБ, и одна владеет внешним ключом от другой, переменная - это схема:

// таблица 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;

// еще одно исправление таблицы

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 определяет, почему бы вместо этого не использовать "join-subclass"?

Кроме того, в чем разница между «set / map / list / idbag» и «one-to-many / many-to-one» в xml-файле отображения?

1 Ответ

0 голосов
/ 09 ноября 2010

hbm2java интерпретирует внешний ключ из FeatureFix в FeatureInfo как набор. Это естественная интерпретация этого. При обычном чтении базы данных между FeatureInfo и FeatureFix существует отношение один ко многим, поэтому hbm2java отображает класс следующим образом.

hbm2java использует набор, потому что это простейшее решение для отображения и, следовательно, значение по умолчанию.

hbm2java не может определить разницу между структурой объединенных подклассов и структурой типа «один-ко-многим» на уровне базы данных, потому что они отображаются одинаково, и, таким образом, это соответствует типичной схеме «один ко многим». Объединенный подкласс используется не так часто, как один ко многим.

...