【问题标题】:Physical Naming Strategy is ignored in SQLDelete annotationSQLDelete 注释中忽略物理命名策略
【发布时间】:2017-11-27 13:05:24
【问题描述】:

我在persistance.xml 中映射的物理命名策略效果很好,除了尝试在带有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。

附:我不知道您可能需要的任何其他相关信息,请随时询问。

【问题讨论】:

  • 如果我没记错的话@SQLDelete 想要原生 SQL 语句,所以命名策略应该没有效果......我发现表名变成大写更奇怪......
  • @Zeromus 请将其格式化为答案,您是第一个,因此应该得到赏金奖励(如果愿意,请提出符合 Java/Hibernate 标准的建议)

标签: hibernate sql-delete


【解决方案1】:

@SQLDelete 注释允许您定义自定义的原生 SQL 查询来替换默认的休眠删除。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2018-02-18
    • 1970-01-01
    • 2016-05-22
    • 2021-05-11
    • 2011-11-13
    • 2012-07-16
    • 2011-09-15
    相关资源
    最近更新 更多