0

次のような状況があると仮定しましょう: クラス Articles のすべての値を、インスタンスの名前を除いて継承したいとします。どうすればそれを達成できますか?記事からすべてを継承したい場合は、次のように書くだけです。

public class Fruits extends Articles{ ... }

しかし、クラス Articles の特定の属性のみを継承するにはどうすればよいでしょうか。1つと1つの属性を除くすべての属性はそのままですか?

編集:

@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

記事からメンバーを削除することはできません

nameがArticlesおよび Fruits IS A Articlesのメンバーである場合、 nameを削除する方法がありませんでした

スコーププライベートを使用して記事から一部のメンバーを非表示にすることができます

もう 1 つの方法は、メンバー名なしでクラス「 BaseArticles 」を作成することです。

次に、BaseArticles から Articles と 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 に答える