HQL 쿼리에서 휴지 상태 테이블이 매핑되지 않음 오류
데이터베이스를 통해 CRUD 작업을 수행하기 위해 휴지 상태를 사용하는 웹 응용 프로그램이 있습니다.테이블이 매핑되지 않았다는 오류가 발생했습니다.Java 파일을 참조해 주세요.
오류 메시지:
org.springframework.orm.hibernate3.HibernateQueryException: Books is not mapped [SELECT COUNT(*) FROM Books]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:660)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
...
Caused by: org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
...
여기 .DAO.java★★★★
public int getTotalBooks(){
return DataAccessUtils.intResult(hibernateTemplate.find(
"SELECT COUNT(*) FROM Books"));
}
Book.java:
@Entity
@Table(name="Books")
public class Book {
@Id
@GeneratedValue
@Column(name="id")
private int id;
@Column(name="title", nullable=false)
private String title;
...
}
작업을 하려면 어떻게 수정해야 합니까?
예외 메시지는 다음과 같습니다.
Books is not mapped [SELECT COUNT(*) FROM Books]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
Books매핑되지 않았습니다., 음, 음, 음, 음, 음, 음, 음, type, type, type, type, type, type, type, type, type, that, that, that, that, that, type called,Books.
그리고 사실, 거기에는 없습니다. 맵된 을 '매핑'이라고 .Book표는 '표'에 있습니다Books, 이 은 ", "라고 불립니다BookHQL(또는 JPQL) 쿼리를 쓸 때는 테이블이 아닌 유형의 이름을 사용합니다.
따라서 쿼리를 다음과 같이 변경합니다.
select count(*) from Book
내 생각엔 그게 필요할 것 같아
select count(b) from Book b
HQL을 하지 않는 *표기법
hibernate3.HibernateQueryException: Books is not mapped [SELECT COUNT(*) FROM Books];
Hibernate는 "Books"라는 이름의 엔티티를 모른다고 말합니다.다음 엔티티를 살펴보겠습니다.
@javax.persistence.Entity
@javax.persistence.Table(name = "Books")
public class Book {
맞아요. 테이블 이름Book이름이 "Books"로 변경되었지만 엔티티 이름은 클래스 이름에서 "Book"으로 유지됩니다.는, 「」를 .@Entity"이것들"은 다음과 같습니다.
// this allows you to use the entity Books in HQL queries
@javax.persistence.Entity(name = "Books")
public class Book {
그러면 엔티티 이름과 테이블 이름이 모두 설정됩니다.
할때.Person.hbm.xml파일을 Java 주석을 사용하여 휴지 상태 필드를 설명합니다.XML을 사용하다
<hibernate-mapping package="...">
<class name="Person" table="persons" lazy="true">
...
</hibernate-mapping>
내 새는 '아예'를 있었다.@Entity(name=...)테이블 이름을 세팅하기 위해 필요했어요.
// this renames the entity and sets the table name
@javax.persistence.Entity(name = "persons")
public class Person {
...
그 결과 다음과 같은 HQL 오류가 발생했습니다.
QuerySyntaxException: Person is not mapped
[SELECT id FROM Person WHERE id in (:ids)]
이 문제의 문제는 엔티티 이름이 다음과 같이 변경되고 있다는 것입니다.persons다음과 같이 해 둘 필요가 .다음을 사용하여 테이블 이름을 설정해야 합니다.
// no name = here so the entity can be used as Person
@javax.persistence.Entity
// table name specified here
@javax.persistence.Table(name = "persons")
public class Person extends BaseGeneratedId {
이 답변은 늦었지만 "table not map" 예외와 관련된 개념을 요약한 것입니다(동면 초보자에게는 매우 일반적이기 때문에 이 문제가 발생한 사용자를 지원하기 위해).이 오류는 여러 가지 이유로 나타날 수 있지만, 목표는 다수의 초보 휴지 개발자가 직면한 가장 일반적인 오류에 대처하여 연구 시간을 절약하는 것입니다.아래의 간단한 데모를 위해 저만의 예를 사용하고 있습니다.
예외:
org.hibernate.hql.internal.ast.QuerySyntaxException: subscriber is not mapped [ from subscriber]
간단히 말해, 이 매우 일반적인 예외는 아래 코드에서 쿼리가 잘못되었음을 나타낼 뿐입니다.
Session session = this.sessionFactory.getCurrentSession();
List<Subscriber> personsList = session.createQuery(" from subscriber").list();
POJO 클래스는 다음과 같이 선언됩니다.
@Entity
@Table(name = "subscriber")
public class Subscriber
단, "from subscriber" 쿼리 구문은 올바르고 테이블은subscriber.이치노
- SQL이 아닌 HQL 쿼리입니다.
여기서 설명하는 방법
HQL은 데이터베이스 테이블 및 열이 아닌 영구 개체 및 해당 속성과 함께 작동합니다.
subscriber이치노가 subscriber 「」로 .Subscriber코드를 다음과 같이 변경하면 문제가 해결됩니다.
Session session = this.sessionFactory.getCurrentSession();
List<Subscriber> personsList = session.createQuery(" from Subscriber").list();
헷갈리지 않게 하려고요HQL은 많은 경우 대소문자를 구분합니다.그렇지 않았다면 내 경우엔 효과가 있었을 거야.
SELECT, FROM 및 WHERE 등의 키워드는 대소문자를 구분하지 않지만 HQL에서는 테이블 및 열 이름과 같은 속성은 대소문자를 구분합니다.
https://www.tutorialspoint.com/hibernate/hibernate_query_language.htm
휴지 상태 매핑의 구조에 대한 자세한 내용은 다음을 참조하십시오.
엔티티 주석과 테이블 주석이 있는지 확인하고 테이블 주석에서 테이블 이름을 설정합니다.
@Entity
@Table(name = "table_name")
public class TableName {
}
여러분 감사합니다.좋은 아이디어가 많네요.이것은 봄과 휴면에서의 첫 번째 어플리케이션입니다.그러니까 나 같은 '혁신'을 상대할 때는 조금만 더 인내심을 갖고..
톰 앤더슨과 로만 C의 답변을 읽어주세요.그들은 그 문제를 아주 잘 설명해 주었다.그리고 너희 모두 날 도와줬어교체했습니다.
SELECT COUNT(*) FROM Books
와 함께
select count(book.id) from Book book
물론 스프링 구성은 다음과 같습니다.
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="packagesToScan" value="extjs.model"/>
다시 한 번 감사드립니다!
수락된 답변 외에 sessionFactory.setPackages에서 엔티티 패키지에 대한 참조가 올바른지 확인하는 체크도 있습니다.세션 팩토리 설정 중 ToScan(...)을 클릭합니다.
에 " " 라고 합니다.applicationContext.xml서, 「」는sessionFactory this config config config
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="packagesToScan" value="${package.name}"/>
네이티브 쿼리에 대해서도 같은 문제가 있었습니다만, 누락된 것입니다.nativeQuery = true
@Query(
value = "SELECT * FROM USERS u WHERE u.status = 1",
nativeQuery = true)
Collection<User> findAllActiveUsersNative();
하다기본적으로는 클래스 이름은 첫 글자가 대문자로 표시됩니다.그래서 만약 당신의 클래스가 불려진다면FooBar하지 마세요."foobar""FooBar"정확한 대문자 표기를 할 수 있는 방법을 찾아야 합니다.
같은 문제가 있었습니다만, 대신에 @Entity는 다음의 코드를 사용해 레코드를 취득했습니다.
List<Map<String, Object>> list = null;
list = incidentHibernateTemplate.execute(new HibernateCallback<List<Map<String, Object>>>() {
@Override
public List<Map<String, Object>> doInHibernate(Session session) throws HibernateException {
Query query = session.createSQLQuery("SELECT * from table where appcode = :app");
query.setParameter("app", apptype);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
return query.list();
}
});
업데이트를 위해 다음 코드를 사용했습니다.
private @Autowired HibernateTemplate incidentHibernateTemplate;
Integer updateCount = 0;
updateCount = incidentHibernateTemplate.execute((Session session) -> {
Query<?> query = session
.createSQLQuery("UPDATE tablename SET key = :apiurl, data_mode = :mode WHERE apiname= :api ");
query.setParameter("apiurl", url);
query.setParameter("api", api);
query.setParameter("mode", mode);
return query.executeUpdate();
}
);
이 가 발생한 파일 내에 으로 판명되었습니다.hibernate.cfg.xml
<mapping class="com.your.package.MyClass" />
그리고 나서, 나는 그 매핑을 올바르게 사용할 수 있었다.
FROM MyClass WHERE prop LIKE ":myId"
언급URL : https://stackoverflow.com/questions/14446048/hibernate-table-not-mapped-error-in-hql-query
'programing' 카테고리의 다른 글
| Angular-animate - 알 수 없는 공급자: $$asyncCallbackProvider <- $asyncCallback <- $animate <- $compile (0) | 2023.03.05 |
|---|---|
| '입력'의 알려진 속성이 아니므로 'formControl'에 바인딩할 수 없음 - Angular2 재료 자동 완성 문제 (0) | 2023.03.05 |
| VS 코드가 모든 워드프레스 함수 이름을 강조 표시함 (0) | 2023.03.05 |
| JSON 파일 정규화 (0) | 2023.03.05 |
| AngularJS에서 CSS 스타일을 조건부로 적용하는 방법은 무엇입니까? (0) | 2023.03.05 |