我试图在用户和地址之间建立双向关系,
用户1-------->*地址
但是
地址1-------->1个用户
我在上网时得到了这些信息
>
对于一对一双向关系,拥有方对应于包含对应外键的方
双向关系的反向侧必须通过使用OneToOne、
OneToMany或ManyToMany批注的mappedBy元素来引用其
所属侧。mappedBy元素指定作为
关系所有者的实体中的属性或字段。
但如果我按照情报行事
我需要使用Mapped By on User Entity,Set
hold OnetoMany mapping同时我需要使用Mapped By on Address Entity,User hold OnetoMany mapping注意:但是针对用户的Address实体的@JoinColumn可以正常工作。如果我在用户实体或地址实体上使用mappedBy,我会得到一个异常,说明
“实体类[class Com.entity.User]中的属性[Address]的mappedBy值[User]在其所属实体类[class Com.entity.Address]中不存在。如果所属实体类是@MappedSuperClass,则这是无效的,并且您的属性应引用正确的子类。”
我对如何使用mapped By作为这种类型的双向关系感到困惑。
更新:
<pre>
@Entity
public class User {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY,mappedBy="user")
private Set<Address> adresses;
}
@Entity
public class Address {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;
...
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "userid", nullable = false)
private User user;
}
</pre>
问题是@OneTomany
只能具有反向的@ManyToOne
,而不能具有反向的@OneToOne
。@OneToOne
只能作为另一个@OneToOne
的mapped,请检查javadoc中的这些方法。
映射贝娄给出了您想要的含义:一个用户可以有多个地址,但一个地址只能使用@joincolumn
中指定的外键中的id引用一个用户:
@Entity
public class User {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;
...
@OneToMany(mappedBy="user")
private Set<Address> adresses;
}
@Entity
public class Address {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;
...
@ManyToOne(optional=false)
@JoinColumn("your_foreign_key_name")
private User user;
}
问题内容: 假设我们具有以下实体: 在更新中可以理解,我们需要保持双方的关系如下: 到目前为止一切都很好。问题是,我是否应按以下所述在双方上进行合并,并且避免使用级联进行第二次合并? 还是合并拥有者足够?这些合并是否还应该在Transaction或EJB内部进行?还是在具有分离实体的简单控制器方法上完成它? 问题答案: 问题是,我是否应按以下所述在双方上进行合并,并且避免使用级联进行第二次合并?
服务 我的主要方法 所以在这里,当我尝试在students表中添加学生时,它给出了一个错误,错误是Falling
我正试图将一对多关联映射到一个实体,该实体是用映射的,但是当我的应用程序加载时,我遇到了一个验证异常: 内部异常:异常[EclipseLink-7250](Eclipse Persistence Services 2.5.2.v20140319-9AD6ABD):org.Eclipse.Persistence.exceptions.ValidationException异常 描述:[class m
问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系
我正在为我的项目使用Spring Data JPA(以hibernate作为提供程序),并想知道何时需要实体之间的双向映射? 在我的用例中,我有一个实体,与实体具有关系。目前,我在实体中没有相应的关系。从我所能理解的查看其他帖子,除非我需要通过我的实体/Hibernate删除,否则我可能不需要这样做。我想知道通过双向关系我还能得到什么? 这是我的,不包括访问者: 这是,不包括访问器: 如果我一直在
问题内容: 单向关联和双向关联有什么区别? 由于在数据库中生成的表都是相同的,所以我发现的唯一区别是双向关联的每一侧都有一个引用,而单向则没有。 这是单向关联 双向关联 区别在于该组是否持有用户的参考。 所以我想知道这是否是唯一的区别?哪个推荐? 问题答案: 主要区别在于,双向关系提供了双向导航访问,因此您无需显式查询即可访问另一侧。此外,它还允许您在两个方向上应用级联选项。 请注意,导航访问并不