hibernate ManyOne HQL bug

ENTITY:




@Entity
@Table(name = "S_TALK")
public class STalk {


private String content;
private int id;
private int prohibit;
private int replaySize;
private Set<STalk> replyTalkList ;
private STalk talk;
private Date talkTime;
private STopic topic;
private SUser user;


public STalk() {
super();
}

public STalk(int id) {
this.id = id;
}

public STalk(String userNickname,String photo,Date talkTime,String content,int replyTalkListSize,int id) {
this.id = id;
user = new SUser();
user.setNickName(userNickname);
user.setPhoto(photo);
this.talkTime = talkTime;
this.content = content;
this.replaySize = replyTalkListSize;

}


@Column(name = "S_TALK_CONTENT")
public String getContent() {
return content;
}


@Id
@GeneratedValue
public int getId() {
return id;
}


@Column(nullable = false, name = "S_TALK_PROHIBIT")
public int getProhibit() {
return prohibit;
}


@Transient
public int getReplaySize() {
return replaySize;
}


@OneToMany(mappedBy = "talk")
public Set<STalk> getReplyTalkList() {
return replyTalkList;
}


@ManyToOne
@JoinColumn(name = "S_TALK_PARENT")
public STalk getTalk() {
return talk;
}


@Column(nullable = false, name = "S_TALK_TIME")
public Date getTalkTime() {
return talkTime;
}


@ManyToOne
@JoinColumn(name = "S_TOPIC_ID")
public STopic getTopic() {
return topic;
}


@ManyToOne
@JoinColumn(name = "S_USER_ID")
public SUser getUser() {
return user;
}


public void setContent(String content) {
this.content = content;
}


public void setId(int id) {
this.id = id;
}


public void setProhibit(int prohibit) {
this.prohibit = prohibit;
}


public void setReplaySize(int replaySize) {
this.replaySize = replaySize;
}


public void setReplyTalkList(Set<STalk> replyTalkList) {
this.replyTalkList = replyTalkList;
}


public void setTalk(STalk talk) {
this.talk = talk;
}


public void setTalkTime(Date talkTime) {
this.talkTime = talkTime;
}


public void setTopic(STopic topic) {
this.topic = topic;
}


public void setUser(SUser user) {
this.user = user;
}


}


HQL : (RIGHT)

String hql = " SELECT new list(t2.id,MAX(t2.content),COUNT(t1.id)) FROM STalkt1 RIGHT JOINt1.talk t2 WHERE t2.talk IS NULL ANDt2.topic.id = ? GROUP BY t2.id ";


CONSOLE LOG:

Hibernate: 
    select
        stalk1_.id as col_0_0_,
        max(stalk1_.S_TALK_CONTENT) as col_1_0_,
        count(stalk0_.id) as col_2_0_ 
    from
        S_TALK stalk0_ 
    right outer join
        S_TALK stalk1_ 
            on stalk0_.S_TALK_PARENT=stalk1_.id 
    where
        (
            stalk1_.S_TALK_PARENT is null
        ) 
        and stalk1_.S_TOPIC_ID=? 
    group by
        stalk1_.id



HQL:(ERROR)

String hql = " SELECT new list(t1.id,MAX(t1.content),COUNT(t2.id)) FROM STalk t1 LEFT JOIN t1.talk t2 WHERE t1.talk IS NULL AND t1.topic.id = ? GROUP BY t1.id "


CONSOLE LOG:

Hibernate: 
    select
        stalk0_.id as col_0_0_,
        max(stalk0_.S_TALK_CONTENT) as col_1_0_,
        count(stalk1_.id) as col_2_0_ 
    from
        S_TALK stalk0_ 
    left outer join
        S_TALK stalk1_ 
            on stalk0_.S_TALK_PARENT=stalk1_.id 
    where
        (
            stalk0_.S_TALK_PARENT is null
        ) 
        and stalk0_.S_TOPIC_ID=? 
    group by
        stalk0_.id


使用hibernate HQL JOIN 查询时,  老是使用首张表的ManyToOne字段进行关联,不会真实去根据关联关系查找。后来经过半天的摸索,发现调个顺序就可以解决了!坑爹啊!!!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值