【问题标题】:Use join into hibernate mapping against main class foreing key在针对主类外键的休眠映射中使用连接
【发布时间】:2018-05-29 11:33:13
【问题描述】:

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

我有两个表“地址”和“人”与 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;

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

重要的是我需要使用“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>

这不起作用,因为“加入”键列“id_address”正在创建针对主键“id_person”的映射,我不知道如何更改此行为列以使用该人的“ id_sent_address”而不是“id_person”。有什么解决办法吗?

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

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

非常感谢!

【问题讨论】:

  • 你为什么不用ORM
  • hibernate 是一个 ORM...你是什么意思?
  • 您可以编写一个类并使用@Entity,而不是定义架构。因此,您使用 java class 管理您的表
  • 我需要使用休眠

标签: java mysql hibernate hibernate-mapping


【解决方案1】:

两件事,首先,订单事项。您需要先创建您的地址表,然后才能创建您的人员表,作为人员表的 id_sent_address DEPENDS 在地址表的 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;

【讨论】:

  • 是的,sql 有错误,但这只是情况的一个例子。我已经编辑过了。我不是在问如何执行 sql,问题是如何进行映射...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 2020-11-17
  • 2018-06-12
相关资源
最近更新 更多