SQLDelete注释中忽略物理命名策略

时间:2017-11-27 13:05:24

标签: hibernate sql-delete

我在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。我不知道您可能需要的任何其他相关信息,所以请随时提问。

1 个答案:

答案 0 :(得分:3)

@SQLDelete注释允许您定义自定义的本机SQL查询来替换默认的hibernate删除。

您应该只使用Db表和列名,因为命名策略不会用于本机sql。