对主类foreing键使用join到hibernate映射

时间:2017-12-15 09:24:10

标签: java mysql hibernate hibernate-mapping

这是对我的情况和我无法实施的要求的简单描述:

我有两张桌子"地址"和"人"与FK有关:

CREATE TABLE `address` (
  `id_address` int(11) NOT NULL,
  `street` varchar(250) DEFAULT NULL,
  `city` varchar(250) DEFAULT NULL,
  PRIMARY KEY (`id_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `person` (
  `id_person` int(11) NOT NULL,
  `name` varchar(250) DEFAULT NULL,
  `id_sent_address` INT(11) NOT NULL,
  PRIMARY KEY (`id_person`),
  CONSTRAINT `fkSentAddress` FOREIGN KEY (`id_sent_address`) REFERENCES `address` (`id_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我想用这两个表创建一个hibernate映射来创建一个简单的模型。

重要的是我需要使用" join"进行映射。有这样的事情:

<class name="xxx.PersonAndAddress" table="person">

    <id name="idPerson" type="java.lang.Integer">
        <column name="id_person" />
        <generator class="identity" />
    </id>

    <property name="name" type="java.lang.String" column="name"/>

    <join table="address">
        <key column="id_address" />
        <property name="street" column="street" />
        <property name="city" column="city" />
    </join>

</class>

这不起作用,因为&#34;加入&#34;键列&#34; id_address&#34;正在创建针对主键&#34; id_person&#34;的映射,并且我不知道如何更改此行为列以使用此人&#34; id_sent_address&#34;相反&#34; id_person&#34;。有没有解决方案?

正如我所说,这是一个描述我真正问题的简单情况,涉及更多领域和更多逻辑,但这是问题的实质。

现在我正在为每个地址字段使用公式,但是字段数量很大,我会使用连接来提高其性能。

非常感谢!

1 个答案:

答案 0 :(得分:-1)

两件事,首先是订购事项。您需要首先创建地址表,然后才能创建人员表,作为人员表在地址表中的id_address上的id_sent_address DEPENDS

其次,要设置外键,目标键也必须是一个键,你忘了添加它。

因此,一旦修复了两个错误,您就应该能够无误地执行它。

CREATE TABLE `address` (
  `id_address` int(11) NOT NULL,
  `street` varchar(250) DEFAULT NULL,
  `city` varchar(250) DEFAULT NULL,
  PRIMARY KEY(`id_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `person` (
  `id_person` int(11) NOT NULL,
  `name` varchar(250) DEFAULT NULL,
  `id_sent_address` INT(11) NOT NULL,
  PRIMARY KEY (`id_person`),
  CONSTRAINT `fkSentAddress` FOREIGN KEY (`id_sent_address`) REFERENCES `address` (`id_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;