Hibernate双向多对多查询方法

文件:MachineInfo.java  对应  MachineInfo.hbm.xml

public class MachineInfo implements Serializable{
    private Integer id;
    private String machine_id;
    private String machine_name;
    private Date machine_makedate;
    
    private Set<DeviceUser> deviceusers = new HashSet<DeviceUser>();
}


<hibernate-mapping package="COM">
	<class name="MachineInfo" table="machineinfo_table">
		
		<id name="id" type="java.lang.Integer">
			<column name="Machine_Id" />
			<generator class="identity" />
		</id>
		
		<property name="machine_id" type="java.lang.String">
			<column name="MachineId" />
		</property>
		<property name="machine_name" type="java.lang.String">
			<column name="machine_name" />
		</property>
		
		<property name="machine_makedate" type="date">
			<column name="Machine_Makedate" />
		</property>
		
		<set name="deviceusers" table="deviceusers_machine">
			<key column="Machine_Id" />
			<many-to-many class="DeviceUser" column="User_Id" />
		</set>
		
	</class>
</hibernate-mapping>



文件:DeviceUser.java   对应   DeviceUser.hbm.xml

public class DeviceUser implements Serializable{
	private Integer id;	
	private String name;
	private String sex;
	private Integer age;
	private String phone;
	private String job;
	private String desc;
	
	private Set<MachineInfo> machinelists = new HashSet<MachineInfo>();
}

<hibernate-mapping package="COM">

	<class name="DeviceUser" table="deviceusers_table">
	
		<id name="id" type="java.lang.Integer">
			<column name="User_Id" />
			<generator class="identity" />
		</id>
		
		<property name="name" type="java.lang.String">
			<column name="User_Name" />
		</property>
		
		<property name="sex" type="java.lang.String">
			<column name="User_Sex" />
		</property>
		
		<property name="age" type="java.lang.Integer">
			<column name="User_Age" />
		</property>

		<property name="phone" type="java.lang.String">
			<column name="User_Phone" />
		</property>
		
		<property name="job" type="java.lang.String">
			<column name="User_Job" />
		</property>
		
		<property name="desc" type="java.lang.String">
			<column name="User_Desc" />
		</property>
		
		<set name="machinelists" table="deviceusers_machine">
			<key column="User_Id" />
			<many-to-many class="MachineInfo" column="Machine_Id" />
		</set>
		
	</class>
</hibernate-mapping>

生成的表有3个,不过查询和表名无关,就不列出表了

下一步,查询一,通过用户名 查询他所管理的设备列表,

String hql2="SELECT m from MachineInfo as m join m.deviceusers r WHERE r.name='de7'";
        
        Query query = session.createQuery(hql2);
        
        List<MachineInfo> list = query.list();
        for (MachineInfo deviceUser : list) {
            System.out.println(deviceUser.getMachine_id());
        }
返回结果可返回所有该用户名下的设备


查询二,通过设备查询所有使用该设备的人

String hql="SELECT p from DeviceUser as p join p.machinelists r WHERE r.machine_id='111'";
        
        Query query = session.createQuery(hql);
        
        List<DeviceUser > list = query.list();
        for (DeviceUser deviceUser : list) {
            System.out.println(deviceUser.getname());
        }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值