2016-07-21 4 views
0

JPA(Hibernateバージョン:4.2.1、JPAバージョン: 1.8.1)のHibernate実装を使用しています。私はネイティブクエリをいくつか持っています。その結果はカスタムPOJOSのリスト(@Entityでマークされています)にマップされています。しかし、クエリが実行されると、自分のMySQLスキーマで作成された空のテーブルがPOJOの属性を特徴とします。ネイティブクエリ結果を「エンティティ」としてマークせずにPOJOにマッピングすることはできないと考えて、既存のスキーマにテーブルを追加しないようにするにはどうすればよいですか。クエリ実行時にDBに作成されたテーブルに対応するネイティブクエリの結果をPOJOにマッピング

POJO

package abc; 
@Entity 
public class Myclass 
{ 
@Id 
private Integer productId; 
private String productName; 
public MyClass(){ 
} 
/**getters and setters for productId and productName**/ 
} 

コードスニペット

List<Integer> productIdList = new ArrayList<>(); 
productIdList.add(1); 
productIdList.add(20); 
productIdList.add(34); 
List<MyClass> myList=(List<MyClass>)(entityManager.createNativeQuery("select p.productId, p.productName from products p where p.productId IN (:productIdList)",MyClass.class).setParameter("productIdList", productIdList).getResultList()); 
+1

これは私には非常に奇妙に聞こえる。関連するコードを含めることはできますか?通常、ネイティブクエリは、結果セットの各レコードに対して 'List 'の型を返さなければなりません。 –

+0

JPA 1.0,2.0,2.1があります。 JPA 1.8.1はありません! –

+0

presistence.xmlファイルで "hibernate.hbm2ddl.auto"という名前の構成を確認し、削除します。この構成は、コードで定義されたエンティティに基づいてテーブルを作成、更新、および削除するために使用されます。あなたは何を正確にしているのか理解できるようにコードを投稿できますか? – Navnath

答えて

0

NATIVEのクエリを実行するために、私はhibernate.hbm2ddl.autoのパラメータのすべての可能な値が、運を試してみましたそのため、同じ問題を抱えていました。単純に、私はdo_nothingのようなオプションを期待していますが、ドキュメントにはそのようなものはありません。そこで、私の解決策は の各エンティティに@Table("tbl_to_remove_<YourObjectName>")を追加し、dbで手動でtbl_to_removeで始まるすべての新しく作成されたテーブルを削除し、アプリケーションを再起動するたびにyesを削除することでした。コミュニティのドキュメントから

here可能なオプションは、SessionFactoryのが作成されたときに

hibernate.hbm2ddl.autoがデータベースに自動的にスキーマDDL を検証したり、輸出記載されています。作成ドロップの場合、 SessionFactoryが明示的に閉じられると、データベーススキーマは削除されます。

|更新|作成する|作成 - ドロップ

+0

はい.thのようですただ今のところ..アプリケーションがデプロイされるたびにJPAがDB上でDDLを実行するのを防ぐための方法があるはずです。 – jarvis

+0

本当の答えを見つけて私たちと共有すれば本当にうれしいでしょう。 – ismail

関連する問題