1

以下のようにクラスを設定しました。Hibernate ddlは、AdminとCustomerの2つのテーブルを生成します。SINGLE_TABLE戦略に従って、1つのテーブルのみを期待していました。

@MappedSuperclass
public abstract class BaseUser{
...
}

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Admin extends BaseUser{
...
}


@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Customer extends BaseUser{
@OneToMany
private List<Order> orders;
...
}
4

2 に答える 2

1

いいえ、単一テーブル継承の動作は異なります。継承戦略は、スーパークラスで定義する必要があります。参考のためにJPAWikibookを参照してください。

@Entity
@Inheritance
@DiscriminatorColumn(name="USER_TYPE")
@Table(name="USER")
public abstract class BaseUser{
...
}

@Entity
@DiscriminatorValue("A")
public class Admin extends BaseUser{
...
}

@Entity
@DiscriminatorValue("C")
public class Customer extends BaseUser{
@OneToMany
private List<Order> orders;
...
}

データベースによっては、テーブルの呼び出しが許可される場合と許可されない場合があることに注意してくださいUSER@MappedSuperclassの使用方法の例もあります。

于 2012-12-31T14:11:10.507 に答える
-1

@MappedSuperclassが機能しない理由は不明ですが、これはすべて機能しているようです。

@Entity
@Inheritance
public abstract class BaseUser{
...
}

@Entity
public class Admin extends BaseUser{
...
}


@Entity
public class Customer extends BaseUser{
@OneToMany
private List<Order> orders;
...
}
于 2012-12-31T15:17:37.967 に答える