У меня такая проблема. Есть таблица с первичным ключем с нескольких столбцов. Все работает если делаю такие действия:
| Код | 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>
|
|