繁体   English   中英

Spring data jpa 在空数据库中为具有包含外键的复合主键的实体创建错误的字段

[英]Spring data jpa creates wrong fields in empty database for entity with composite primary key that contains foreign key

我有以下数据库结构来简化:

Table Product:
-----
id(pk)

Table Place:
-----
id(pk)

Table WarehouseProduct:
-----
place(pk, fk)
product(pk, fk)
count

我使用此代码在代码中描述数据库:

地方:

@Entity 
public class Place {
    @Id
    String id;
}

产品:

@Entity 
public class Product {
    @Id
    String id;
}

WarehouseProduct 的主键:

@Embeddable
public class WarehouseProductPK implements Serializable {
    String place;
    String product;
}

仓库产品:

@Entity
public class WarehouseProduct {
    @EmbeddedId;
    WarehouseProductPK pk;

    @OneToOne(targetEntity = Product.class)
    Product product;

    @OneToOne(targetEntity = Place.class)
    Place place;

    @Column(nullable = false)
    int count;
}

我在空的 h2 数据库上对此进行了测试。 结果是为 WarehouseProduct 创建了下表:

Table WarehouseProduct:
-----
place(pk)
product(pk)
count
placeId(fk)
productId(fk)

如何在空数据库中使用数据 jpa 创建所需的数据库结构?

使用以下代码为 WarehouseProduct 实体数据 jpa 创建所需的数据库结构:

WarehouseProduct 的主键:

@Embeddable
public class WarehouseProductPK implements Serializable {
    @OneToOne(targetEntity = Place.class)
    Place place;

    @OneToOne(targetEntity = Product.class)
    Product product;
}

仓库产品:

@Entity
public class WarehouseProduct {
    @EmbeddedId;
    WarehouseProductPK pk;

    @Column(nullable = false)
    int count;
}

结果我在空的 h2 db 中得到了这样的 WarehouseProduct 表:

Table WarehouseProduct:
-----
placeId(pk, fk)
productId(pk, fk)
count
@Embeddable
public class WarehouseProductPK implements Serializable {

    @Column(name="place")
    String placeId;

    @Column(name="product")
    String productId;
}

@Entity
public class WarehouseProduct {
    @EmbeddedId;
    WarehouseProductPK pk;

    @OneToOne
    @MapsId("placeId")
    @JoinColumn(name="place")
    Place place;

    @OneToOne
    @MapsId("productId")
    @JoinColumn(name="product")
    Product product;

    @Column(nullable = false)
    int count;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM