Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate + composite-id + select query, не работает select 
:(
    Опции темы
Crocodile
Дата 16.8.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.7.2007

Репутация: нет
Всего: нет



У меня такая проблема. Есть таблица с первичным ключем с нескольких столбцов. Все работает если делаю такие действия:

Код

ProjectMemberKey key = new ProjectMemberKey("1234", "Admin");        
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
ProjectMember member = (ProjectMember) session.load(ProjectMember.class, key);
session.close();
sessionFactory.close();


или такое тоже работает

Код
        
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
[B]List<Object> list = session.createQuery("select projectMemberKey from ProjectMember").list();[B]
session.close();
sessionFactory.close();


Но как мне писать SQL queries ecли мне надо выбрать столбцы с ключя. То есть такое неработает:
Код
        
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
[B]List<Object> list = session.createQuery("select Member from ProjectMember where RoleInProject='Manager'").list();[B]
session.close();
sessionFactory.close();






ProjectMember.java
Код

package db.table;

import db.tablekey.ProjectMemberKey;

/* Represents ProjectMember table in database IBM */
public final class ProjectMember {
    private static final long serialVersionUID = 100L;

    private ProjectMemberKey projectMemberKey;
    // Post VARCHAR(150) NOT NULL
    private String post = new String();
    // RoleInProject CHAR(7) NOT NULL
    private String roleInProject = Roles.MEMBER.getValue();
    

    private ProjectMember() {
    }
    public ProjectMember(ProjectMemberKey key, String post,
            Roles roleInProject) {
        setProjectMemberKey(key);
        setPost(post);
        setRoleInProject(roleInProject.getValue());
    }
    
    
    public ProjectMemberKey getProjectMemberKey() {
        return projectMemberKey;
    }
    public void setProjectMemberKey(ProjectMemberKey projectMemberKey) {
        this.projectMemberKey = projectMemberKey;
    }
        
    public String getPost() {
        return post;
    }
    public void setPost(String post) {    
        this.post = post.length() > 150 ? this.post : post;
    }
    
    public String getRoleInProject() {
        return roleInProject;
    }
    public void setRoleInProject(String roleInProject) {
        this.roleInProject = roleInProject;
    }
    
}
    


ProjectMemberKey.java
Код

package db.tablekey;

import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;


public class ProjectMemberKey implements Serializable {
    private static final long serialVersionUID = 100L;

    // Project VARCHAR(250)        NOT NULL
    private String projectId;
    // Member VARCHAR(100) NOT NULL
    private String member = new String();
    
    
    private ProjectMemberKey() {
    }
    public ProjectMemberKey(String project, String member) {
        setProjectId(project);
        setMember(member);
    }
    
    public String getProjectId() {
        return projectId;
    }
    public void setProjectId(String projectId) {        
        this.projectId = projectId;
    }
    
    public String getMember() {
        return member;
    }
    public void setMember(String member) {
        this.member = member.length() > 100 ? this.member : member;
    }
    
        
    public boolean equals(Object other) {
        if (!(other instanceof ProjectMemberKey))
         return false;
        ProjectMemberKey castOther = (ProjectMemberKey)other;        
        return new EqualsBuilder()
            .append(this.getProjectId(), castOther.getProjectId())
            .append(this.getMember(), castOther.getMember())
            .isEquals();
    }
    public int hashCode() {
        return new HashCodeBuilder()
            .append(getProjectId())
            .append(getMember())
            .toHashCode();
    }
        
}
    


ProjectMember.hbm.xml
Код

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="db.table.ProjectMember" table="ProjectMember">
        <composite-id name="projectMemberKey" class="db.tablekey.ProjectMemberKey"> 
         <key-property name="projectId" type="string" column="ProjectId"/> 
         <key-property name="member" type="string" column="Member"/>           
        </composite-id> 
        <property name="post" type="string" column="Post" not-null="true"/>
        <property name="roleInProject" type="string" column="RoleInProject" not-null="true"/>
    </class>

</hibernate-mapping>




Это сообщение отредактировал(а) Crocodile - 16.8.2007, 19:28
PM MAIL   Вверх
AlexeyVorotnikov
Дата 16.8.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 3
Всего: 18



А что оно говорит? Или ничего не говорит? А что в логе пишет?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Crocodile
Дата 20.8.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.7.2007

Репутация: нет
Всего: нет



Код

javax.servlet.ServletException: No data type for node: org.hibernate.hql.ast.tree.IdentNode 
 \-[IDENT] IdentNode: 'ProjectId' {originalText=ProjectId}

    javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)


root cause 

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode 
 \-[IDENT] IdentNode: 'ProjectId' {originalText=ProjectId}

    org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:145)
    org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:705)
    org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:529)
    org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:645)
    org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
    org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
    org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
    org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
    org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
    org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
    org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
    org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)


Help please:)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.