首页 > 解决方案 > @OneToOne 映射为 @OneToMany

问题描述

//@OneToOne 关系被 Spring data JPA 映射为 @OneToMany // 在 MySQL 中休眠

@Entity
@Table(name = "product")
public class Product extends DataJournal {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double price;

    private Date dom;
    private Date expiryDate;

    @OneToOne(mappedBy = "product", optional = false)
    private Stock stock;
    //getters and setters
}

@Entity
@Table(name = "stock")
public class Stock extends DataJournal {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long quantity;
    private Long reOrderLabel;

    @OneToOne
    @JoinColumn(name="product_id")
    private Product product;
    //getters and setters
}

// Product 和stock 的关系是@OneToOne 但在Mysql 中映射为 //@OneToMany,下面是mysql 数据库和//relation [1] 的逆向关系:https ://imgur.com/a/OqC0Ddt [2 ]:https ://imgur.com/a/3fFMuDD

标签: mysqlhibernatespring-data-jpa

解决方案


如果您让 Hibernate 为您生成 DDL,请尝试@JoinColumn(unique = true)在您的Stock课程中使用:

@Entity
@Table(name = "stock")
public class Stock extends DataJournal {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long quantity;
    private Long reOrderLabel;

    @OneToOne
    @JoinColumn(name="product_id", unique = true)
    private Product product;
    //getters and setters
}

推荐阅读