Java 双向关系
我试图在用户和地址之间建立双向关系 用户1------------>*地址 但是 地址1------->1个用户 我在网上查到了这些信息Java 双向关系,java,entity-framework,hibernate,jpa,eclipselink,Java,Entity Framework,Hibernate,Jpa,Eclipselink,我试图在用户和地址之间建立双向关系 用户1------------>*地址 但是 地址1------->1个用户 我在网上查到了这些信息 对于一对一的双向关系,拥有方 对应于包含相应外键的一侧 双向关系的反向侧必须指其 通过使用OneTONE的mappedBy元素拥有一方, 一个或多个注释。mappedBy元素指定 实体中作为所有者的属性或字段 关系 但是如果我按照信息进行,那么 我需要在用户实体上使用Mapped By,其中Set保持一个omany映射 同时,我需要使用Mapped By
- 对于一对一的双向关系,拥有方 对应于包含相应外键的一侧
- 双向关系的反向侧必须指其
通过使用OneTONE的mappedBy元素拥有一方,
一个或多个注释。mappedBy元素指定 实体中作为所有者的属性或字段
关系
<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>
@实体
公共类用户{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
保护长id;
...
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“user”)
专用地址;
}
@实体
公共课堂演讲{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
保护长id;
...
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name=“userid”,nullable=false)
私人用户;
}
问题是@OneToMany
只能作为反@ManyToOne
,而不能作为@OneToOne
@OneToOne
只能由另一个@OneToOne
映射,请查看javadoc中的这些方法
下面的映射为您提供了所需的含义:一个用户可以有多个地址,但一个地址只能引用一个使用@JoinColumn
中指定的外键id的用户:
@实体
公共类用户{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
保护长id;
...
@OneToMany(mappedBy=“用户”)
专用地址;
}
@实体
公共课堂演讲{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
保护长id;
...
@多通(可选=假)
@JoinColumn(“您的外键名”)
私人用户;
}
发布您的用户和地址类或其中至少相关部分的注释。这将更容易看到问题所在。我已经发布了一个答案,看看我对另一个问题的回答(向下滚动问题直到接受答案后也可以看到我的帖子),了解更多关于拥有方的含义、如何使用、陷阱的信息,etc->@jhadesdev:您提供的链接通过使用ManyTone和OneToMany的示例来描述Mapped的用法。但是在我的例子中,它是manytone和onetomany如果一个用户有许多地址,那么根据定义,反向关系是manytone-许多地址引用单个用户。在数据库中,这意味着地址表有一个指向用户表的外键。请参见示例和解释,但jhadesdev给出的答案似乎是正确的。在Address Entity中,用户是OneToOne而不是ManyToone。我已经发布了一些详细信息,我认为我提出的映射为您提供了所需的含义
@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;
}