Hibernate只嵌入了类的一些字段(不是整个类)

时间:2016-08-07 08:14:26

标签: java hibernate

在我的数据库中,我有一个包含10列的表Article。我还有一个ItemArticle作为外键 - Item中的一个字段是Article_ID字段。但是,Item还有来自Article的另一个字段,即Article_Price

所以情况是我在Article_PriceArticle表格中都有Item字段,即使Item已经有Article一个FK。

问题是 - 如何在Article_Price课程中嵌入 Item字段,而不是整个Article(因为它已作为单独的表)?

我理解为嵌入整个Article,代码看起来如下所示。

@Entity
@Embeddable
public class Article {
    //...


@Entity
public class Item {

    @Embedded
    Article article;

但我只需要嵌入Article_PriceArticle保留为FK。像这样:

Item.java

@Entity
@Table(name = "Item")
public class Item {

    @Id     
    @Column(name = "Item_ID", nullable = false)
    private int id;

    @ManyToOne
    @JoinColumn(name = "Article_ID")
    private Article article;

    @Embedded // I want only this attribute from Article to embedded here
    @Column(name = "Article_Price")
    private float articlePrice;

Article.java

@Entity
@Table (name = "Article")
public class Article {

    @Id
    private int id;

    @Embeddable // I want only this attribute to be embeddable
    @Column(name = "Article_Price", nullable = false)
    private float price;

我怎样才能做到这一点?

更新

我在我的Item.java中执行了属性覆盖,如下所示:

    @ManyToOne
    @JoinColumn(name = "Article_ID", nullable = false)
    @Embedded // embedding only the price field
    @AttributeOverride(name = "price", column = @Column(name = "Article_Price", nullable = false))
    private Article article;

我现在能够将这样的Item对象存储到数据库中,并且它映射到正确的Article_ID,但Article_Price字段始终为0.所以它没有#t复制Article_Price表中的实际Article,但只是默认值。知道如何解决这个问题吗?

我这样保存:

    Session s = sf.openSession();
//      
//      // saving to the DB
        s.beginTransaction();

        Article article = s.get(Article.class, 5391); // 5391 is the ID
        Item item = new Item(6.00f, article, 18.00f);

        s.save(item);

问题是ID为5391的Article的{​​{1}}属性值为150,当我保存引用此Article_Price的{​​{1}}时, Item的属性Article它的值为0.它也应该是150。

0 个答案:

没有答案