我在persistance.xml中映射的物理命名策略很有效,除非whaen尝试使用SQLDelete注释调用em.remove(尝试软删除)。有人有类似的问题吗?
我的相关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配置该表名为MAS_GRAPHIC而不是MASGRAPHIC。
P.S。我不知道您可能需要的任何其他相关信息,所以请随时提问。
答案 0 :(得分:3)
@SQLDelete
注释允许您定义自定义的本机SQL查询来替换默认的hibernate删除。
您应该只使用Db表和列名,因为命名策略不会用于本机sql。