您的位置:首页 > 其它

hibernate中的一个要注意的连接关联问题

2008-07-13 23:18 302 查看
情景为,投票程序.游客可以对一个作品进行投票的,它们之间有点象多对多的关系,投票时,每个单独的IP每天

只能投某个作品一次,要投第2次的话只能等第2天了.数据库结构表为:

ip表

id 自动递增

ip ip

votetime 投票时间

pid 该投票是投哪一个作品,关联photo表的pid字段

那么分别看vote类的domain设计

  
public class Vote {

private int id;

private int voteid;

private String ip;

private String votetime;

private Photo photo;

////省略getter/setter;

public class photo

{

private Set ip;

//其他省略.

vote.hbm.xml:

<hibernate-mapping>

<class table="ip" name="liao.domain.Vote">

<id name="id" column="id" type="integer">

<generator class="increment" />

</id>

<property name="ip"/>

<property name="votetime"/>

<many-to-one column="pid" name="Photo" not-null="true" class="liao.domain.Photo"/>

</class>

</hibernate-mapping>

photo.hbm.xml

其中关联的部分为

<set cascade="none" name="ip" inverse="true" lazy="false">

<key column="pid" />

<one-to-many class="liao.domain.Vote" />

</set>

好了,上面四者都有的话,下面有个场景,很实际,是查询的,要查询某个PID的作品是否已经有IP投过票了,应该这样搞.

Object[] params=new Object[]{pid};

List dataList = this.getHibernateTemplate().find("from Vote as i where i.Photo.pid=?",pid);

// List dataList=this.getHibernateTemplate().find("select ip from Vote ip where ip.pid=?",pid);

if (dataList.size() == 0) {

return null;

}

else

{

System.out.println(dataList.get(0).toString());

return (Vote)dataList.get(0);

  

   要特别注意 List dataList = this.getHibernateTemplate().find("from Vote as i where i.Photo.pid=?",pid);

的写法,这样比较好.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐