2017-11-27 1 views
3

persistance.xml에 매핑 된 필사적 명명 전략은 SQLDelete 주석이있는 엔티티에서 em.remove (소프트 삭제를 시도)를 호출하는 것을 제외하고는 훌륭하게 작동합니다. 누구나 비슷한 문제가 있었습니까?SQLDelete 주석에서 물리적 이름 지정 전략이 무시됩니다.

주석

<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> 

내 관련 persistance.xml :

@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. 귀하가 필요로하는 다른 관련 정보를 알지 못하므로 언제든지 물어보십시오.

+0

@SQLDelete가 네이티브 SQL 문을 원한다면 이름 지정 전략에 아무런 영향이 없어야합니다 ... 테이블 이름에 대문자가 더 이상하다는 것을 발견했습니다. – Zeromus

+0

@Zeromus 현상금 보상을받을 자격이 있습니다 (Java/Hibernate 표준을 준수하는 Sugestion을 제안하십시오) –

답변

3

@SQLDelete annotation을 사용하면 기본 최대 절전 모드 삭제를 바꾸기 위해 사용자 지정 원시 SQL 쿼리를 정의 할 수 있습니다.

네이티브 SQL에 이름 지정 전략을 사용하지 않으므로 Db 테이블과 열 이름 만 사용해야합니다.

관련 문제