Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对主类foring键使用join-into-hibernate映射_Java_Mysql_Hibernate_Hibernate Mapping - Fatal编程技术网

Java 对主类foring键使用join-into-hibernate映射

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

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

我有两个与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>

这不起作用,因为“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,问题是如何进行映射。。。