- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嵌入式和实体之间是否可能存在双向关系或仅存在单向关系?
@Entity
public class Employee {
@Id
private long id;
...
@Embedded
private EmploymentPeriod period;
...
}
@Embeddable
public class EmploymentPeriod {
@Column(name="START_DATE")
private java.sql.Date startDate;
@Column(name="END_DATE")
private java.sql.Date endDate;
@OneToMany
private EntityABCD entityABCD ;
....
}
@Entity
public class EntityABCD {
@Id
private long id;
...
@ManyToOne(mappedby="entityABCD")
private EmploymentPeriod period;
...
}
<小时/>
根据 JPA 规范:2.5 可嵌入类
An entity cannot have a unidirectional relationship to the embeddable class of another entity (or itself).
<小时/>
请按照 JPA 规范的规定澄清上述行。
最佳答案
当每个实体都指向另一个实体时,关系是双向的。
如果只有一个实体指向另一个实体,则关系是单向。
在您的具体情况下,句子:
An entity cannot have a unidirectional relationship to the embeddable class of another entity (or itself)
可以翻译为:
EntityABCD entity cannot have a unidirectional relationship to the embeddable class EmploymentPeriod of another Employee entity.
换句话说:
If Employee entity has an embedded EmploymentPeriod, it is not possible to define an unidirectional relationship from EntityABCD entity to embeddable EmploymentPeriod of entity Employee.
为什么?
由于可嵌入对象没有自己的标识(缺少主键),因此只需将其视为封装它的实体的一部分。从数据库的角度来看,嵌入对象与其余实体属性存储在一行中。
由于上述原因,如果有人尝试从 EntityABCD
创建单向关系,则 EmploymentPeriod
由于缺乏 EmploymentPeriod
的身份,这是根本不可能的,因此不可能在嵌入对象中创建外键。
如何解决外键问题?
外键需要在可嵌入类之外物理创建,这取决于关系类型。一个例子(:
@Entity
public class Employee {
@Id
private long id;
@Embedded
private EmploymentPeriod period;
}
@Embeddable
public class EmploymentPeriod {
@ManyToOne //owning relationship
@JoinColumn //FK in EMPLOYEE table (by default: ENTITYABCD_ID)
private EntityABCD entityABCD;
@ManyToMany //owning relationship
@MapKey(name="id") //refers to EntityABCD.id
@JoinTable //FK in the join table (by default: EMPLOYEE_ENTITYABCD)
private Map<Long, EntityABCD> entitiesABCD;
}
@Entity
public class EntityABCD {
@Id
private long id;
@OneToMany(mappedBy = "period.entityABCD") //non-owning relationship
List<Employee> employee;
@ManyToMany(mappedBy="period.entitiesABCD") //non-owning relationship
private List<Employee> employees;
}
当嵌入对象内存在双向关系时,它们被视为存在于所属实体 (Employee
) 中目标实体 (EntityABCD
) 指向所属实体,而不是嵌入对象 (EmploymentPeriod
)。
值得一提的是,embeddables 只能嵌入:
关于java - jpa Embeddables 与实体的双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21693071/
我想知道是否可以在另一个 Embeddable 中包含一个 Embeddable 的 ElementCollection ? 这是我的供应商实体的示例,其中包含可嵌入类型的地址列表: @Entity
我们正在将旧的基于 xml 的配置转换为基于注解的配置 情况 有一个类注释为 @Embeddable(ParentPk.java) ,另一个类扩展了这个类,它是 @Embeddable(ChildPk
JPA ElementCollection Embeddable 可以具有 ElementCollection List Embeddable 属性吗? @Entity class Perso
我有实体 Ride 和 @ElementCollection(targetClass = RideLocation.class): @ElementCollection(targetClass = R
在搜索了 JPA 文档和各种帖子后,我对 JPA2.0 是否可以实现以下功能感到困惑。我刚开始使用 JPA,所以如果我做了一些愚蠢的事情,请原谅, 我的领域模型有一个“投资组合”,其中包含零个或多个“
我正在使用 @ElementCollection 作为自定义对象列表 @ElementCollection @CollectionTable(name = "choice", joinColumns
我正在使用 v3 youtube API 根据其 ID 获取视频数据。 这是我当前的搜索: https://www.googleapis.com/youtube/v3/videos?part=snip
两个表如: CREATE TABLE foo ( id INT PRIMARY KEY, x TEXT ); CREATE TABLE bar ( foo_id INT REFERENCE
想象一下下面的类 @Embeddable class A { @ManyToOne public B classB; ... public State someEnum
我收到了一个 Eclipse 错误:@EmbeddedId . 这是实体: @Entity @Table(name = "PERSON") public class Person implements
我按照 sitepoint moviestore tutorial进行操作,除了用户购买电影后未将视频加载到iframe中之外,其他一切工作正常。我在一栏中有一个带有youtube url的csv文件
我有一个简单的关系,其中一个实体有许多特定于它的地址,定义为: @Entity public class Corporation { @Id private Long id;
嵌入式和实体之间是否可能存在双向关系或仅存在单向关系? @Entity public class Employee { @Id private long id; ... @Embedd
我看到许多使用 @Embeddable 建立一对多关系的示例,如下所示: @Entity @Table(name = "profiles") public class Profile { @I
如何获取 Maven 插件内的 Maven 项目的所有配置文件列表? 会是: MavenEmbedder.readModel(new File("path to pom.xml")).getProfi
我尝试在可嵌入中使用 elementCollection,但 JPA2.0 似乎忽略它。 如果我进行调试,我会看到可嵌入的集合已被填充,但它不会被持久化,并且 JPA 不会抛出任何异常。它似乎只是由于
我想创建一个类 Exporter,它有两个电话号码:座机和手机。知道电话号码由国家代码和号码组成,我创建了一个 Embeddable 类: @Embeddable public class Embed
我有一个场景,hibernate 中的 Embeddable 类使用Entity。根据我在SO和其他链接上找到的各种答案,我们可以在Embeddable类中编写@ManyToOne,@OneToMan
我有一个用户类,它有一个类配置文件@Embedded。如何为 Profile 的实例提供对其所有者 User 类的引用? @Entity class User implements Serializa
我有一个 JPA 实体的类层次结构,它们都继承自 BaseEntity 类: @MappedSuperclass @EntityListeners( { ValidatorListener.class
我是一名优秀的程序员,十分优秀!