这是对我的情况和我无法实施的要求的简单描述:
我有两张桌子"地址"和"人"与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;。有没有解决方案?
正如我所说,这是一个描述我真正问题的简单情况,涉及更多领域和更多逻辑,但这是问题的实质。
现在我正在为每个地址字段使用公式,但是字段数量很大,我会使用连接来提高其性能。
非常感谢!
答案 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;