16

次の例のように、POJO JPAエンティティを拡張して(休止状態プロバイダーを使用して)属性と動作を追加し、entityManagerがpojoエンティティだけでなく拡張オブジェクトを返すようにすることが可能かどうかを知る必要があります。

POJOJPAエンティティクラス

@Entity
@Table("test")
public class Test implements Serializable {
}

拡張クラス

public class ExtendedTest extends Test {
...
}

拡張クラスのオブジェクトのフェッチ

List<ExtendedTest> extendedList = entityManager.createNamedQuery("ExtendedTest.findByFoo").setParameter("foo", "bar").getResultList();

私が評価している他の可能な方法は、複合エンティティで機能を拡張し、すべてのセッターとゲッターを委任することですが、これは巨大なテーブルで多くの作業を意味する可能性があります。

public class ExtendedTest2 {
    private Test test;

    public ExtendedTest2(Test test) {
        this.test = test;
    }

    public getFoo() {
        return test.getFoo();
    }

    public getBar() {
        return test.getBar();
    } 

    ...
}

任意の提案は非常に高く評価されます。

4

1 に答える 1

34

使用する@Inheritance

@Entity
@Table(name="TEST")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Test {
    ...
}

@Entity
public class ExtendedTest 
    extends Test {
    ...
}  

また@MappedSuperclass

@MappedSuperclass
public class Test {
    ...
}

@Entity
public class ExtendedTest 
    extends Test {
    ...
}
于 2012-09-24T18:22:50.843 に答える