我通过 Hibernate 创建了 3 个表,如何返回 List<task>
什么时候设置 task_status
=?并设置 create_user_id
= ?, task_status
在“dotask”表中,create_user_id
在 task
表。
如何编写“HQL”?这是我的,但我不能用它来实现:
String hql="from task t left join dotask d on d.task_status = ? and t.create_user_id = ? limit ?, ?";
Query query=sess.createQuery(hql);
query.set(0,1);
...
query.set(4,2);
List<Task> lt=query.list();
task.hbm.xml 如下:
<class name="com.model.Task" table="task" >
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
...
...
<set name="lu" table="dotask" cascade="save-update" lazy="true">
<key column="task_id"></key>
<many-to-many class="com.model.User" column="user_id"></many-to-many>
</set>
</class>
还有表格:
CREATE TABLE `dotask` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`task_id` int(11) NOT NULL,
`task_status` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `FKB0F704903D43702C` (`user_id`),
KEY `FKB0F70490EA675DEC` (`task_id`),
CONSTRAINT `FKB0F704903D43702C` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
CONSTRAINT `FKB0F70490EA675DEC` FOREIGN KEY (`task_id`) REFERENCES `task` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
CREATE TABLE `task` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(128) NOT NULL,
`create_user_id` int(11) NOT NULL,
`create_time` date NOT NULL,
`end_time` date default NULL,
`limit_time` date NOT NULL,
`day` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`departmentId` int(11) default NULL,
`name` varchar(50) default NULL,
`password` varchar(50) default NULL,
`sex` char(2) default NULL,
`birthday` date default NULL,
`address` varchar(200) default NULL,
`phone` varchar(100) default NULL,
`mobile` varchar(100) default NULL,
`remark` varchar(255) default NULL,
`login` varchar(50) default NULL,
`email` varchar(200) default NULL,
`active` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
最佳答案
试试这个(不确定,因为你没有显示对象模型也没有描述所有关系):
SELECT t
FROM Task t LEFT JOIN t.dotask d WITH d.task_status = ?
WHERE t.create_user_id = ?
并使用 setMaxResults()
和 setFirstResult()
以可移植的方式限制结果。
引用资料
- Hibernate 核心引用指南
关于java - 如何通过 Hibernate 按页查询到表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3643286/