[@ OneToOne非键列的映射

问题描述 投票:1回答:1

我正在为现有的旧模式使用Hibernate(我无法更新它,并且有一个奇怪的情况:

表用户:

  1. db_id PK
  2. user_id(唯一约束)
  3. ...其他列

表地址

  1. db_id PK
  2. user_id(唯一约束)
  3. ...通常的地址列

这些具有一对一的关系。我正在创建以下@Entity带注释的类。

class UserEntity {
    @Id
    @GeneratedValue
    private UUID dbId;

    private String userId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id", referencedColumnName = "user_id")
    private AddressEntity address;
}
class AddressEntity {
    @Id
    @GeneratedValue
    private UUID dbId;

    private String userId;

    @OneToOne
    private UserEntity user;
}

Hibernate认为这是重复的列定义,这是合理的。但是,由于在地址表中我没有user_id作为FK或PK,所以我不确定如何将此信息传达给Hibernate。我曾尝试寻找类似但没有成功的方法,因此任何建议将不胜感激。

hibernate spring-data-jpa spring-data hibernate-mapping
1个回答
0
投票

有一些错误:

  1. 缺少某些注释,例如@Entity@Table(但您的代码中可能已经包含了它们)
  2. 属性与列名不匹配,因为private UUID dbId不会映射到db_id
  3. 双向@OneToOne错误
  4. 属性Address.userId不应该存在

尝试这些:

@Entity
@Table(name = "T_USER")
public class UserEntity
{
    @Id
    @Column(name = "DB_ID")
    private UUID dbId;

    @Column(name = "USER_ID")
    private String userId;

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
    private AddressEntity address;
}

@Entity
@Table(name = "T_ADDRESS")
public class AddressEntity
{
    @Id
    @Column(name = "DB_ID")
    private UUID dbId;

    @OneToOne
    @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
    private UserEntity user;
}
© www.soinside.com 2019 - 2024. All rights reserved.