额外列是在hibernate jpa OneToOne关系中添加db表

时间:2016-03-24 07:39:52

标签: java mysql hibernate jpa

我在OneToOne关系上有三个实体类Product - > SkuImpl - > SkuAvailabilityImpl我只需要添加一个产品,因此记录会插入sku表同时进入SkuAvailability

SkuImpl.java

@Entity 
public class SkuImpl implements  Sku {
    @OneToOne(targetEntity=SkuAvailabilityImpl.class, cascade={cascadeType.ALL},fetch=FetchType.EAGER) 
    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
    @LazyCollection(LazyCollectionOption.FALSE)
    protected SkuAvailability totalSku;
    //setter and getters
}

SkuAvailabilityImpl.java

@Entity 
public class SkuAvailabilityImpl implements SkuAvailability{
    @OneToOne(optional=true,targetEntity=SkuImpl.class) 
    @Cascade(value={org.hibernate.annotations.CascadeType.ALL})
    @JoinColumn(name="SKU_ID", referencedColumnName='SKU_ID',insertable=false,updatable=false)
    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
    protected Sku sku;
    //setter and getters
}

sku数据库表是

SKU_ID  | NAME   | QUANTITY | SKU_AVAILABILITY_ID 
--------+--------+----------+--------------------
        |        |          |

所有记录都插入正常,但问题是,在上表中添加了一个额外的列,名称为totalSku_SKU_AVAILABILITY_ID,如下所示

SKU_ID  | NAME   | QUANTITY | SKU_AVAILABILITY_ID |totalSku_SKU_AVAILABILITY_ID
--------+--------+----------+--------------------
101     |product1|  200     |                    |  503

我尝试删除该列,但它又重新创建了。我不明白为什么这个专栏正在添加,任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您还没有为字段" SkuImpl.totalSku"定义列名称。所以它根据JPA规范定义定义了自己的列名。 使用您在数据库中的名称添加@JoinColumn