0

让我们假设我们有以下情况:我们想要继承类 Articles 的所有值,除了一个它的名字之外。我们怎样才能实现它?我知道,如果我们想继承文章中的所有内容,只需编写

public class Fruits extends Articles{ ... }

但是我们如何才能设法只继承类文章的特定属性,即。除了一个和一个属性之外的每个属性都保持不变?

编辑:

@Entity
@Table(name = "Article")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Article {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Basic(optional = false)
@Column(name = "ART_ID")
private Long id;

@Basic(optional = false)
@Column(name = "ART_NAME")
private String name;

@Basic(optional = true)
@Column(name = "ART_COST")
private String cost;  

// ...
}

@Entity
@Table(name="Fruits")
@AttributeOverrides({
@AttributeOverride(name="name", column=@Column(name="ART_NAME")),
@AttributeOverride(name="cost", column=@Column(name="ART_COST")),
})
// This is what is causing the issue. Fruits inherits something which is already     defined in it's scope, and as the result can't declare exactly how to process it.
public class Fruits extends Article {

@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Basic(optional = false)
@Column(name = "FRU_ID")
private Long fruitID;

@Column(name="FRU_FROZEN")
private String fruFrozen;

//...
}

所以,我认为代码行不通,因为这会导致实体层次结构中出现多个 ID,那么我还有其他方法可以解决这个问题吗?

4

2 回答 2

1

您不能从文章中删除成员

nameArticles和 Fruits IS A Articles 的成员时,无法删除name

您可以使用私有范围从文章中隐藏一些成员

另一种方法是创建一个没有成员名称的类“ BaseArticles ” 。

然后从 BaseArticles 派生 Articles AND Fruits

public BaseArticles {
   // HAS NO private String name;
...
}

public Article extends BaseArticles {
   private String name;
...
}

public Fruits extends BaseArticles {
  // WITHOUT  private String name;
...
}

但是,使用 hibernate 处理 OO 继承并不简单,但可以实现。有注释,但我不知道

于 2012-04-28T18:40:17.093 回答
0

您可以将基类不需要的属性作为私有属性。

于 2012-04-28T18:39:52.837 回答