2017-11-27 16 views
3

persistance.xmlにマップされた私のフィジカルネーミング戦略は、SQLDeleteアノテーションを持つエンティティ上でem.remove(ソフト削除しようとしています)を呼び出そうとした場合を除き、うまく動作します。誰もが同様の問題を抱えていた?SQLDeleteアノテーションの物理ネーミング戦略は無視されます

私の関連persistance.xml

<properties> 
     <property name="hibernate.physical_naming_strategy" value="common.hibernate.strategy.PhysicalNamingStrategyImpl" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> 
     <property name="hibernate.show_sql" value="true"/> 
    </properties> 

注釈:

@SQLDelete(sql = "UPDATE MasGraphic MASG SET MASG .deleted = true WHERE MASG.id = ? and MASG.updated = ?") 

し、エラーがある:

Table "UPDATE MASGRAPHIC MASG SET MASG.deleted = true WHERE MASG.id = ? and MASG.updated = ? [42102-193] 
[ERROR ] HHH000346: Error during managed flush [org.hibernate.exception.SQLGrammarException: could not prepare statement] 

編集:例外の一部に起因する追加するには、次

Caused by: org.h2.jdbc.JdbcSQLException: Table "MASGRAPHIC" not found; SQL statement: 
UPDATE MASGRAPHIC MASG SET MASG.deleted = true WHERE MASG.id = ? and MASG.updated = ? [42102-193] 

私のカスタムPhysicalNamingStrategyImplは、そのテーブルがMASGRAPHICではなくMAS_GRAPHICと呼ばれるように設定します。

P.S.あなたが必要とするかもしれない他の関連情報は知らないので、お気軽にお尋ねください。

+0

もし私が@SQLDeleteとネイティブSQLステートメントが間違っていないとネーミング戦略は効果がないはずだから... テーブル名が大文字になっているのがもっと奇妙だとわかる... – Zeromus

+0

@Zeromusあなたが望むならば、Java/Hibernate標準に準拠したSugestionを提案してください) –

答えて

3

@SQLDelete annotationでは、カスタムのネイティブSQLクエリを定義して、デフォルトの休止状態の削除を置き換えることができます。

ネーミング戦略としてDbテーブルとカラム名を使用するのは、ネイティブSQLでは使用されません。

関連する問題