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.あなたが必要とするかもしれない他の関連情報は知らないので、お気軽にお尋ねください。
もし私が@SQLDeleteとネイティブSQLステートメントが間違っていないとネーミング戦略は効果がないはずだから... テーブル名が大文字になっているのがもっと奇妙だとわかる... – Zeromus
@Zeromusあなたが望むならば、Java/Hibernate標準に準拠したSugestionを提案してください) –