在我的数据库中,我有一个包含10列的表Article
。我还有一个Item
表Article
作为外键 - Item
中的一个字段是Article_ID
字段。但是,Item
还有来自Article
的另一个字段,即Article_Price
。
所以情况是我在Article_Price
和Article
表格中都有Item
字段,即使Item
已经有Article
一个FK。
问题是 - 如何在Article_Price
课程中嵌入仅 Item
字段,而不是整个Article
(因为它已作为单独的表)?
我理解为嵌入整个Article
,代码看起来如下所示。
@Entity
@Embeddable
public class Article {
//...
@Entity
public class Item {
@Embedded
Article article;
但我只需要嵌入Article_Price
,Article
保留为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。