是这样的 现在我有两张表 USERS 和IPMAC表  IPMAC表中有个userid外键关联着USERS
做了相关映射后 
现在查 from ipmac 得出的结果 IPMAC表 一般信息 如IP可以查到,但是USERS对象查询结果为空
如果使用select i.users from Ipmac i 却可以查到users对象
在线求助各位大牛,附上配置文件等Users.javapackage cn.com.sedee.centermanager.hibernate;import java.util.HashSet;
import java.util.Set;/**
 * Users entity.
 * 
 * @author MyEclipse Persistence Tools
 */public class Users implements java.io.Serializable { // Fields private Long id;
private String username;
private String password;
private String fullname;
private String res;
private Set roleses = new HashSet(0);
private Set rightses = new HashSet(0);
private Set bmdmbs = new HashSet(0);
private Set wflsbs = new HashSet(0); // Constructors /** default constructor */
public Users() {
} /** full constructor */
public Users(String username, String password, String fullname,
String res, Set roleses, Set rightses, Set bmdmbs, Set wflsbs) {
this.username = username;
this.password = password;
this.fullname = fullname;
this.res = res;
this.roleses = roleses;
this.rightses = rightses;
this.bmdmbs = bmdmbs;
this.wflsbs = wflsbs;
} // Property accessors public Long getId() {
return this.id;
} public void setId(Long id) {
this.id = id;
} public String getUsername() {
return this.username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return this.password;
} public void setPassword(String password) {
this.password = password;
} public String getFullname() {
return this.fullname;
} public void setFullname(String fullname) {
this.fullname = fullname;
} public String getRes() {
return this.res;
} public void setRes(String res) {
this.res = res;
} public Set getRoleses() {
return this.roleses;
} public void setRoleses(Set roleses) {
this.roleses = roleses;
} public Set getRightses() {
return this.rightses;
} public void setRightses(Set rightses) {
this.rightses = rightses;
} public Set getBmdmbs() {
return this.bmdmbs;
} public void setBmdmbs(Set bmdmbs) {
this.bmdmbs = bmdmbs;
} public Set getWflsbs() {
return this.wflsbs;
} public void setWflsbs(Set wflsbs) {
this.wflsbs = wflsbs;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if (((Users)obj).getId() == this.getId()) {
return true;
}
return false; }}Ipmac.javapackage cn.com.sedee.centermanager.hibernate; import java.math.BigDecimal;/**
 * Ipmac entity. @author MyEclipse Persistence Tools
 */public class Ipmac implements java.io.Serializable { // Fields private Long id;
private Users users;
private String ip;
private String mac;
private Long scbj;
private String byzd1;
private String byzd2;
private String bz; // Constructors /** default constructor */
public Ipmac() {
} /** minimal constructor */
public Ipmac(Users users) {
this.users = users;
} /** full constructor */
public Ipmac(Users users, String ip, String mac, Long scbj,
String byzd1, String byzd2, String bz) {
this.users = users;
this.ip = ip;
this.mac = mac;
this.scbj = scbj;
this.byzd1 = byzd1;
this.byzd2 = byzd2;
this.bz = bz;
} // Property accessors public Long getId() {
return this.id;
} public void setId(Long id) {
this.id = id;
} public Users getUsers() {
return this.users;
} public void setUsers(Users users) {
this.users = users;
} public String getIp() {
return this.ip;
} public void setIp(String ip) {
this.ip = ip;
} public String getMac() {
return this.mac;
} public void setMac(String mac) {
this.mac = mac;
} public Long getScbj() {
return this.scbj;
} public void setScbj(Long scbj) {
this.scbj = scbj;
} public String getByzd1() {
return this.byzd1;
} public void setByzd1(String byzd1) {
this.byzd1 = byzd1;
} public String getByzd2() {
return this.byzd2;
} public void setByzd2(String byzd2) {
this.byzd2 = byzd2;
} public String getBz() {
return this.bz;
} public void setBz(String bz) {
this.bz = bz;
}}Users.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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="cn.com.sedee.centermanager.hibernate.Users" table="USERS" schema="SEDMANAGER">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence">
             <param name="sequence">SQ_USERS</param>
            </generator>
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="20" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PASSWORD" length="200" />
        </property>
        <property name="fullname" type="java.lang.String">
            <column name="FULLNAME" length="100" />
        </property>
        <property name="res" type="java.lang.String">
            <column name="REMARKS" />
        </property>
        <set name="roleses" table="USERS_ROLES" schema="SEDMANAGER" lazy="false">
            <key>
                <column name="USER_ID" precision="22" scale="0" not-null="true" />
            </key>
            <many-to-many entity-name="cn.com.sedee.centermanager.hibernate.Roles">
                <column name="ROLE_ID" precision="22" scale="0" not-null="true" />
            </many-to-many>
        </set>
        <set name="rightses" table="USERS_RIGHTS" schema="SEDMANAGER" lazy="false">
            <key>
                <column name="USER_ID" precision="22" scale="0" not-null="true" />
            </key>
            <many-to-many entity-name="cn.com.sedee.centermanager.hibernate.Rights">
                <column name="RIGHTS_ID" length="20" not-null="true" />
            </many-to-many>
        </set>
        <set name="bmdmbs" table="USERS_DEPARTMENTS" schema="SEDMANAGER">
            <key>
                <column name="USERS_ID" precision="22" scale="0" />
            </key>
            <many-to-many entity-name="cn.com.sedee.centermanager.hibernate.Bmdmb">
                <column name="BMDM_ID" precision="22" scale="0" />
            </many-to-many>
        </set>
        <set name="wflsbs" inverse="true">
            <key>
                <column name="CLR_ID" precision="22" scale="0" />
            </key>
            <one-to-many class="cn.com.sedee.centermanager.hibernate.Wflsb" />
        </set>
    </class>
</hibernate-mapping>Ipmac.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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="cn.com.sedee.centermanager.hibernate.Ipmac" table="IPMAC" schema="SEDMANAGER">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence" >
            <param name="sequence">SQ_IPMAC</param>
            </generator>
        </id>
        <many-to-one name="users" class="cn.com.sedee.centermanager.hibernate.Users" fetch="select">
            <column name="USERID" precision="22" scale="0" not-null="true" />
        </many-to-one>
        <property name="ip" type="java.lang.String">
            <column name="IP" length="20" />
        </property>
        <property name="mac" type="java.lang.String">
            <column name="MAC" length="40" />
        </property>
        <property name="scbj" type="java.lang.Long">
            <column name="SCBJ" precision="22" scale="0" />
        </property>
        <property name="byzd1" type="java.lang.String">
            <column name="BYZD1" length="50" />
        </property>
        <property name="byzd2" type="java.lang.String">
            <column name="BYZD2" length="50" />
        </property>
        <property name="bz" type="java.lang.String">
            <column name="BZ" length="100" />
        </property>
    </class>
</hibernate-mapping>

解决方案 »

  1.   

    <many-to-one name="users" class="cn.com.sedee.centermanager.hibernate.Users" fetch="select">
                <column name="USERID" precision="22" scale="0" not-null="true" />
    </many-to-one>
    这个跟lazy属性相关!
    Hibernate默认lazy="true"这样你直接查询的时候、由于你配置的是fetch=select、select查出的是N+1条记录,用了lazy=true,延迟加载的话,select在查询时只会查出主表记录,也就是1。
    你直接查询i.users数据,此时就会自动在执行查询,查出N(users一方的数据)。
    这个时候如果你想每次都自动查询N的一方的数据就配置lazy="false"