1
JPA2/Hibernateアプリケーションでは、テーブルUSERSと一致するエンティティUser + DAOがあります。jpa2 hibernateビューからデータをロードするために既存のエンティティを使用する
ここでは、USERSテーブルのフィルタリングされたデータを含むV_USERSビューを作成しました。
エンティティユーザーを再利用して、このビューのデータをクエリできますか?
JPA2/Hibernateアプリケーションでは、テーブルUSERSと一致するエンティティUser + DAOがあります。jpa2 hibernateビューからデータをロードするために既存のエンティティを使用する
ここでは、USERSテーブルのフィルタリングされたデータを含むV_USERSビューを作成しました。
エンティティユーザーを再利用して、このビューのデータをクエリできますか?
できません。 2つの異なるクラスを同じテーブルにマップすることはできますが、それ以外の方法でマッピングすることはできません。
この制限の理由は、希望JPAプロバイダを使用すると、次のクエリで考えているんどのテーブルを知っていたか、単純です:
em.createQuery("SELECT u FROM User u");
しかしはあなたがすべてで基本クラスAbstractUser
を作成することができますサブクラスを空にする必要があります:User
、たとえばVUser
です。後者の2つのクラスは、異なるテーブル/ビューへのマッピングを持ちます。 MappedSuperclassとその例を参照してください。
@MappedSuperclass
public abstract class AbstractUser {
//all your columns/JPA mapping go here
}
@Entity
@Table(name="USERS")
public class User extends AbstractUser {}
@Entity
@Table(name="V_USERS")
public class VUser extends AbstractUser {}
私の質問はおそらく十分正確ではありませんでした。私はビューから完全に管理されたエンティティを取得したくないのですが、 'List getUsersFromView()'のようなUserDAOメソッドです。私はネイティブクエリーと結果をエンティティクラスにマッピングすることでこれを達成できると思います。確かに、私はJPAを初めて使うので、確認します。 –
alephx