java - @OneToOne 与三个表之间的共享密钥
问题描述
我有三个共享相同主键的实体。Account和Provider实体之间是双向的一对一关系,之前命名的实体共享它们的主键,但同时Provider实体与GlobalRating实体共享主键,这里是单向关系它们之间。我必须说我正在使用休眠和 MySQL 作为数据库:
账户实体:
@Entity
@Table(name="account")
@Getter
@Setter
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "email")
public class Account implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="native")
@GenericGenerator(name = "native", strategy = "native")
@Column(name="id")
private int id;
@OneToOne(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private Provider provider;
}
提供者实体:
@Entity
@Table(name="provider")
@Getter
@Setter
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "providerId")
public class Provider implements Serializable, Comparable<Provider>{
private static final long serialVersionUID = 1L;
@Id
@Column(name="pk_account$provider")
@GeneratedValue(generator="native")
@GenericGenerator(name="native", strategy="foreign",parameters=@Parameter(name="property", value="account"))
private int providerId;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Account account;
@OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
@PrimaryKeyJoinColumn
private GlobalRating globalRating;
}
GlobalRating 实体:
@Entity
@Table(name="global_rating")
@Getter
@Setter
public class GlobalRating implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name="pk_provider$global_rating")
@GeneratedValue(generator="native")
@GenericGenerator(name="native", strategy="foreign",parameters=@Parameter(name="property", value="globalRating"))
private int globalRatingId;
}
我遇到的问题是在使用Provider和GlobalRating创建帐户时。我确信Account和Provider之间的双向映射有效,但问题在于实体Provider和实体GlobalRating的映射。我已经尝试了几种方法,但它不起作用。那么,这种情况如何在休眠中正确映射?
我很感激你能帮我解决这个问题。
解决方案
推荐阅读
- haskell - 使用基于整数的新类型进行代数 Haskell
- c# - FluentAssertions .ShouldNotThrow() 方法在 ver5.4.2 中找不到,但在 ver4.19.4 中找到
- regex - 仅选择第一个 Result /.*(?!.*==>.*).*(\n) / gm
- nsis - 如何向 NSIS 安装程序添加新页面
- javascript - JEST 期望函数在 setTimeout 内被调用
- django - 每次将模型对象保存到数据库时创建一个随机字符串
- c# - 如何从本地广播管理器接收广播消息?
- java - jenkins pipeline error No compiler is provided in this environment 也许你是在 JRE 而不是 JDK 上运行
- ios - 动态改变 UIImageview 的高度
- python - 基于值的多列选择