"select distinct p from Post p join p.tags as t where t.name = ?", tag
join为什么要这样用?这是啥意思?
http://www.cnblogs.com/yiki/archive/2007/01/04/611452.html
你这贴出来的语句不对吧 p又是表的别名 又当列名用
但是这个语句是对的
@monkey456:
那你把表结构贴出来
这不是纯sql语句,是play框架中的
@monkey456:
http://zhidao.baidu.com/link?url=7MDLnmu0tKeenrhNjxTfl5NUNCHL4AEV2E1Zuu8YFHjGKxDdD-ALtE0FsAYEd5rG6ine2HdteOZlBagqXnc_Tw7FF2029gbacOdUbi2C6aK
看完这个你就懂 join是什么意思了
package models;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import play.data.validation.MaxSize;
import play.data.validation.Required;
import play.db.jpa.Model;
@Entity
public class Post extends Model{
@OneToMany(mappedBy="post", cascade=CascadeType.ALL)
public List<Comment> comments;
@Required
public String title;
@Required
public Date postedAt;
@Lob
@Required
@MaxSize(10000)
public String content;
@Required
@ManyToOne
public User author;
@ManyToMany(cascade=CascadeType.PERSIST)
public Set<Tag> tags;
只有这个,表示自动生成在内存数据库的
@monkey456:
这个是ORM 映射数据实体类吧 play 是基于 Hibernate的框架 Hibernate 肯定得设置表与 数据实体类的映射关系 得找到那个映射文件才能看到表结构,既然都有Hibernate了 你为什么还要直接用 sql呢? 直接用Hibernate的类不就行了吗
@xiaoxiao刀: 对
@xiaoxiao刀: 这是别人写的,就是不知道才问阿
@monkey456:
select distinct p from Post p join p.tags as t where t.name = ?
只能这么告诉你了
select distinct(去重) p(应该是列名,这里用p不知道是什么含义,得看表结构) from Post(表名) p(表别名) join p.tags(post 表的tags字段) as t(组合后的表名) where t.name(t表的name字段值条件) =?
如果还看不懂我就没招了 。。
@xiaoxiao刀: 这个我是知道的,但是这种写法有点奇怪阿,join用在这里是干嘛用的,以前从没见过这种用法。不过,还是谢谢你了
@monkey456:
join是组合成新表用啊 。。。。 当你从多个表取值的时候 就得用join 组合成一个新的临时表 再select呀 不然两个表 你怎么把想取的数据取出来呢
@xiaoxiao刀:好的,谢谢!