Hibernate,保存id而不引用对象

时间:2016-08-31 13:43:59

标签: java mysql hibernate foreign-keys hibernate-mapping

假设我有一个对象

class User
{
    int id;
    String name;
    String password;
    List<Property> properties;
}

并且

class Property
{
    int id;
    String key;
    String value;
}

然而,MySQL中的表略有不同。

CREATE TABLE `user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45),
  `password` VARCHAR(45),
  PRIMARY KEY (`id`));

CREATE TABLE `property` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `key` VARCHAR(45) NULL,
  `value` VARCHAR(45) NULL,
  `userId` INT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `userId`
    FOREIGN KEY (`userId`)
    REFERENCES `user` (`userId`));

如何创建hibernate注释,以便如果我想保存用户对象,我最终会相应地保存/创建新属性?

我真的不想把User对象放在Property对象中来实现。

1 个答案:

答案 0 :(得分:0)

您可以使用单向OneToMany映射来实现此目的,但它会创建一个包含userIdpropertyId列的额外表,并且您的属性表不需要userId列。在这种情况下,您将能够获得用户的所有属性,但您无法查询属于哪个用户的特定属性。

如果要在属性对象中包含用户信息,则必须使用双向OneToMany映射,为此您需要将用户放在Property类中。您可以在从以下属性类中获取用户对象的初始化数据库通过配置用户的获取类型。默认情况下,fetch类型为LAZY,这意味着只有在您使用时才会从数据库中获取User对象。