Maria에서 최대 절전 모드를 사용하는 JPQL 업데이트 쿼리에서 오류 발생DB
안녕하세요.
동면 상태를 사용하여 MariaDB 데이터베이스 테이블의 행을 업데이트하려고 합니다.이것은 다음과 같습니다.
public static void updateJPQL() {
EntityManager entmngr = JPAProvider.getEntityManager();
EntityTransaction transaction = entmngr.getTransaction();
transaction.begin();
Query query = entmngr.createQuery("UPDATE users o set o.name = 'John' where o.id =: NID");
query.setParameter("NID", 2L);
query.executeUpdate();
transaction.commit();
entmngr.close();
}
최대 절전 모드에서 다음 오류가 발생합니다.
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.sql.ast.SqlTreeCreationException: Could not locate TableGroup - NavigablePath[model.entity.Users(o)]
다른 쿼리는 잘 실행됩니다.테이블에 삽입할 수도 있고 모든 레코드를 가져올 수도 있지만 이 업데이트 쿼리가 문제입니다.
몇 가지 확인 및 주의 사항:
UPDATE 쿼리에 사용된 테이블 이름은 데이터베이스 테이블 이름이 아닌 매핑된 Java 클래스 이름을 참조해야 하며 대소문자를 구분합니다.그것도 마찬가지입니다.
users쿼리에서 테이블 이름은 우리가 소문자로 시작하는 자바 클래스의 이름을 거의 짓지 않기 때문에?만약 그렇다면 지도화된 자바 클래스 이름으로 변경 부탁드립니다.(열에도 동일하게 적용되며, 실제 테이블 열 이름이 아닌 java object field name을 사용하여 참조)ORM을 사용하는 이유는 SQL을 수동으로 작성하여 DB 레코드를 업데이트하고 싶지 않다는 것입니다.우리는 업데이트 로직을 구현하기 위해 OOP 기법을 사용할 수 있기 때문에 DB 레코드를 Object로 취급하고자 합니다.따라서 객체의 상태를 변경하여 JPA는 SQL을 자동으로 생성하여 해당 DB레코드를 직접 작성하는 것이 아니라 업데이트 할 것입니다.따라서 JPA를 사용하여 레코드를 업데이트하는 올바른 방법은 업데이트할 레코드를 가져와 상태를 변경하는 것입니다.
User user = entmngr.find(User.class, 2L);
user.setName("John")
이 코드에 대해 동일한 문제가 발생한 경우 db는 postgresql:
@Modifying
@Query("DELETE FROM Account a WHERE a.id = :id AND a.user.id = :userId")
int delete(@Param("id") int id, @Param("userId") int userId);
의존성을 사용했습니다.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Alpha5</version>
<type>pom</type>
</dependency>
다음 종속성만 변경하면 모두 작동합니다.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.15.Final</version>
</dependency>
새 버전의 버그일 수도 있고, 하이버네이트 6.0.0을 위한 마법이 필요할 수도 있습니다.Alpha5 + 스프링 데이터 JPA 2.3.0.풀어주다.저는 어떤 정보도 찾지 못했습니다.만약 당신이 그것에 대해 아는 것이 있다면, 저에게 알려주세요.
언급URL : https://stackoverflow.com/questions/59233341/error-in-jpql-update-query-using-hibernate-on-mariadb
'programing' 카테고리의 다른 글
| 자바스크립트/Ajax NTLM 인증 (0) | 2023.11.04 |
|---|---|
| PowerShell 5의 쓰기-호스트 대 쓰기-정보 (0) | 2023.11.04 |
| SQL Server 2008에서 복합 기본 키를 만드는 방법 (0) | 2023.10.30 |
| 요소의 n번째 인스턴스를 가져오는 XPath 쿼리 (0) | 2023.10.30 |
| (++n) 식 크기에서 증분 연산자가 호출되지 않았습니다. (0) | 2023.10.30 |