当前位置: 首页 > 知识库问答 >
问题:

JPA双向关系

奚光霁
2023-03-14

我试图在用户和地址之间建立双向关系,

用户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>
    
  • 共有1个答案

    赵永逸
    2023-03-14

    问题是@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删除,否则我可能不需要这样做。我想知道通过双向关系我还能得到什么? 这是我的,不包括访问者: 这是,不包括访问器: 如果我一直在

    • 问题内容: 单向关联和双向关联有什么区别? 由于在数据库中生成的表都是相同的,所以我发现的唯一区别是双向关联的每一侧都有一个引用,而单向则没有。 这是单向关联 双向关联 区别在于该组是否持有用户的参考。 所以我想知道这是否是唯一的区别?哪个推荐? 问题答案: 主要区别在于,双向关系提供了双向导航访问,因此您无需显式查询即可访问另一侧。此外,它还允许您在两个方向上应用级联选项。 请注意,导航访问并不