【问题标题】:How to define type of JPA relationship in this case?在这种情况下如何定义 JPA 关系的类型?
【发布时间】:2012-10-31 05:49:25
【问题描述】:

我有班级用户和班级地址。 地址仅包含 4 个属性:

publiс class Address {

    private Long id;
    private String country;
    private String city;
    private String street;

    // getters and setters
}

用户结构

public class User {
    private Long id;
    private String name;
    private Address homeAddress;
    private Address businessAddress;

    // other fields and methods
}

当一个实体(User)有两个(或更多)具有自己类型的某些自定义类的字段地址

如果用户只有一个地址,这将是一对多的关系。但是这个案子呢?如何在我的系统中正确定义这些对象?

我尝试在地址类中创建另一个字段users

@OneToMany(mappedBy = "?")
private List<User> users;

但这不是我的问题的解决方案,因为在 User 类中有两个 Address 类型的字段。而且不清楚是不是必须在mappedBy注解中定义...

如果有任何建议,我将不胜感激!

【问题讨论】:

  • 我会说这是一对一的关系。两个人可以拥有相同的物理地址,但他们应该拥有两个分开的地址行,因为如果其中一个人移动到另一个地址,另一个人也不需要移动。

标签: hibernate jpa orm jpa-2.0 relationship


【解决方案1】:
    public class User {
    private Long id;
    private String name;
    private Address homeAddress;
    private Address businessAddress;

    // other fields and methods

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "HOME_ADDRESS_ID")
    public Address getHomeAddress() {
        return homeAddress;
    }

    public void sethOMEAddress(Address homeAddress) {
        this.homeAddress= homeAddress;
    }

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "BUSINESS_ADDRESS_ID")
    public Address getBusinessAddress() {
        return businessAddress;
    }

    public void setBusinessAddress(Address businessAddress) {
        this.businessAddress= businessAddress;
    }
}

并且班级地址保持不变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2020-06-18
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多