Java 对主类foring键使用join-into-hibernate映射
这是对我的情况和我无法实施的要求的简单描述: 我有两个与FK相关的表“地址”和“人员”:Java 对主类foring键使用join-into-hibernate映射,java,mysql,hibernate,hibernate-mapping,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; CREAT
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>
这不起作用,因为“join”键列“id\u address”正在创建与主键“id\u person”的映射,我不知道如何更改此行为列以使用此人的“id\u sent\u address”而不是“id\u person”。有什么解决办法吗?
正如我所说,这是一个简单的情况,描述了我真正的问题,涉及更多的领域和更多的逻辑,但这是问题的本质
现在我正在为每个地址的字段使用公式,但这是一个很大数量的字段,我将使用join来提高其性能
非常感谢 有两件事,首先,顺序很重要。您需要先创建地址表,然后才能创建person表,因为person表的id_sent_address取决于address表中的id_address 其次,要设置外键,目标键也必须是一个键,您忘记添加它了 因此,一旦这两个错误被修复,如下面所示,您应该能够无错误地执行它
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;
为什么不使用
ORM
?hibernate是一种ORM…什么意思?您可以编写一个类并使用@Entity
,而不是定义模式。因此,您使用java类
管理表,我需要使用hibernate,因为sql有错误,但这只是这种情况的一个示例。我已经编辑过了。我不是问如何执行sql,问题是如何进行映射。。。