【问题标题】:JPA OneToOneToOne mappingJPA OneToOneToOne 映射
【发布时间】:2015-01-16 01:52:29
【问题描述】:

我刚刚开始使用 Java Persistence API,并且使用起来很舒服。然而,我遇到了一个小小的设计决定。

假设我经营一家汽车租赁店,有几辆车,几个客户,不同的客户可以使用不同的汽车。为了存储客户最喜欢的汽车,我会使用客户类中的@OneToMany 关系,而对于目前租用汽车的客户,我会使用汽车类中的@OneToOne。

现在,我应该如何存储客户驾驶给定汽车的公里数?例如,对于 MySQL 数据库,我将创建一个包含三个(四个带有 id)列的表:customer_id、car_id 和 km。 customer_id 和 car_id 将是 FK,kms... 是不言自明的。

使用 JPA 的最佳方法是什么?例如,我可以从客户的类中存储一个 @OneToMany 对象,例如一对列表。第一个是汽车,第二个是客户驾驶那辆车的公里数。但这感觉不对。有什么建议吗?

【问题讨论】:

    标签: java mysql hibernate jpa hibernate-mapping


    【解决方案1】:

    您可以像这样拥有一个名为 RentalCarMileage 的实体:

    @Entity
    public class RentalCarMileage implements Serializable {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        @ManyToOne
        private Car car;
    
        @ManyToOne
        private Customer customer;
    
        @Column
        private BigDecimal mileage;
    }
    
    @Entity
    public class Customer implements Serializable {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        @OneToMany(mappedBy = "customer")
        private List<RentalCarMileage> rentals;
    
    }
    
    @Entity
    public class Car implements Serializable {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        @OneToMany(mappedBy = "car")
        private List<RentalCarMileage> rentals;
    
    }
    

    此映射假定您希望进行双向关联,但 @OneToMany 不是强制性的。您可以简单地运行查询来获取汽车或客户的租金。

    【讨论】:

    • 好的,谢谢!它肯定比我想出的要好得多。
    • 感谢您的客气话。
    【解决方案2】:

    我认为您需要一个 @ManyToMany 注释。 例如:

    @ManyToMany
    @JoinTable( name="INTERMEDIATE_TABLE_NAME",
                joinColumns = {@JoinColumn(name="customer_id_name")},
                inverseJoinColumns = {@JoinColumn(name = "car_id_name")})
    Set<Car> cars;
    

    Customer 类中,或者相反,在Car 类中

    【讨论】:

    • 我不确定我是否了解实际公里数的存储位置...?
    • 我的错。我忘了您需要添加公里信息。请改用@VladMihalcea 答案。
    • 啊,太糟糕了。我希望您使用了一些我没有发现的巧妙技巧,并且所有内容都可以使用两个注释和一个字段。
    猜你喜欢
    • 2012-01-04
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2021-07-01
    • 2014-11-19
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多