2013-11-01 1 views
0

최대 절전 모드로 내 데이터베이스 스키마를 작성했다. 테이블을 잘 만들 수 있지만 명명 된 쿼리는 개체가 매핑되지 않았기 때문에 컴파일되지 않습니다.Hibernate는 방금 작성한 테이블의 클래스에 대한 맵핑을 찾을 수 없다.

전체 응용 프로그램은 주석이며 구성에 따라 달라집니다. .xml 파일이 없습니다.

여기에 관련 설정 부분입니다 :

properties = new Properties(); 
properties.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver"); 
properties.setProperty("hibernate.connection.url", con); 
properties.setProperty("hibernate.connection.username", user); 
properties.setProperty("hibernate.connection.password", pass); 
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect"); 
properties.setProperty("hibernate.current_session_context_class","thread"); 
properties.setProperty("hibernate.hbm2ddl.auto","create"); 

Configuration config = new Configuration(); 
config.setProperties(properties); 
config.addAnnotatedClass(Player.class); 
SessionFactory factory = config.buildSessionFactory(); 

내 플레이어 클래스는 지금 꽤 베어 - 그것은 이름과 ID 같은 몇 가지 매개 변수가 있습니다. 그것은 행복하게 이것을 적절한 테이블로 번역합니다.

@Entity 
@NamedQueries({ 
    @NamedQuery(name="verifyPlayerByUuid", query="SELECT name FROM player WHERE uuid = :uuid"), 
    @NamedQuery(name="verifyPlayerByName", query="SELECT name FROM player WHERE name = :name"), 
    @NamedQuery(name="obtainPlayerByUuid", query="FROM player WHERE uuid = :uuid"), 
}) 
public class Player { 
    // impl here 
} 

실행할 때 얻을 수 있습니다. boilerplate 타임 스탬프를 제거하고 패키지 이름을 최대 절전 모드로 설정하여 관련 메시지에 대한 공간을 늘릴 수 있습니다. 나는 또한 데이터를보다 잘 구성하기 위해 메시지를 포맷팅 할 때 자유를 얻었다 - 이것은 공백의 추가 만 포함했다.

[timestamp] [hib].hbm2ddl.SchemaExport - HHH000227: Running hbm2ddl schema export 
[timestamp] [hib].hbm2ddl.SchemaExport - HHH000230: Schema export complete 

[timestamp] [hib].SessionFactoryImpl  - HHH000177: Error in named query: verifyPlayerByUuid 
org.hibernate.hql.internal.ast.QuerySyntaxException: 
    player is not mapped [SELECT name FROM player WHERE uuid = :uuid] 

[timestamp] [hib].SessionFactoryImpl  - HHH000177: Error in named query: obtainPlayerByUuid 
org.hibernate.hql.internal.ast.QuerySyntaxException: 
    player is not mapped [FROM player WHERE uuid = :uuid] 

[timestamp] [hib].SessionFactoryImpl  - HHH000177: Error in named query: verifyPlayerByName 
org.hibernate.hql.internal.ast.QuerySyntaxException: 
    player is not mapped [SELECT name FROM player WHERE name = :name] 

답변

2

당신은

config.addAnnotatedClass(Player.class); 
... 
FROM Player WHERE uuid = :uuid 

은 마찬가지로, uuid 해당 클래스의 필드 할 필요가 매핑 된 엔티티에게있는 클래스의 이름을 사용해야합니다.

+0

그래서 HQL은 대소 문자를 구분합니까? – corsiKa

+0

@corsiKa 네, 매우 그렇습니다. 그렇지 않으면 반사가 작동하지 않습니다. –

+0

@corsiKa 와도 관련이 있습니다. http://stackoverflow.com/questions/5327682/hql-with-fully-qualified-class-name –

관련 문제