hibernate inner join Path expected for join!

9876- 2013-07-29 04:52:43
先贴代码:
POJO

public class ForumPost {
private int pid;
private int fid;
private int backCount;
private String ptitle;
private int user_id;
private String user_name;
private Date subject_time;

public ForumPost(int pid, int fid, String ptitle, int backCount,
int user_id, String user_name,Date subject_time) {
this.pid=pid;
this.fid=fid;
this.ptitle=ptitle;
this.backCount=backCount;
this.user_id=user_id;
this.user_name=user_name;
this.subject_time=subject_time;
}

public int getPid() {
return pid;
}

public void setPid(int pid) {
this.pid = pid;
}

public int getFid() {
return fid;
}

public void setFid(int fid) {
this.fid = fid;
}

public int getBackCount() {
return backCount;
}

public void setBackCount(int backCount) {
this.backCount = backCount;
}

public String getPtitle() {
return ptitle;
}

public void setPtitle(String ptitle) {
this.ptitle = ptitle;
}

public int getUser_id() {
return user_id;
}

public void setUser_id(int user_id) {
this.user_id = user_id;
}

public Date getSubject_time() {
return subject_time;
}

public void setSubject_time(Date subject_time) {
this.subject_time = subject_time;
}

public String getUser_name() {
return user_name;
}

public void setUser_name(String user_name) {
this.user_name = user_name;
}
}




@Entity
@Table(name="forum_post_subject")
public class ForumPostSubject {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="user_id")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Id
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public int getFid() {
return fid;
}
public void setFid(int fid) {
this.fid = fid;
}
public String getPtitle() {
return ptitle;
}
public void setPtitle(String ptitle) {
this.ptitle = ptitle;
}
public Date getSubject_time() {
return subject_time;
}
public void setSubject_time(Date subject_time) {
this.subject_time = subject_time;
}
@Column(name="back_count")
public int getBackCount() {
return backCount;
}
public void setBackCount(int backCount) {
this.backCount = backCount;
}
private int pid;
private int fid;
private String ptitle;
private Date subject_time;
private int backCount;
private User user;

}




@Entity
@Table(name="t_user")
public class User {

private int user_id;
private String user_name;
private String password;
private String mail;
private Date create_time;
private Set<ForumPostSubject> fps;
@Id
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
@OneToMany(fetch = FetchType.LAZY,mappedBy="user")
public Set<ForumPostSubject> getFps() {
return fps;
}
public void setFps(Set<ForumPostSubject> pfs) {
this.fps = pfs;
}

public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
}


Dao:

@Repository
public class ForumPostSubjectDao implements IForumPostSubjectDao {
@Resource
SessionFactory mySessionFactory;

@Override
public List<ForumPost> getPostSubjects(int section_id) {
Session session = mySessionFactory.getCurrentSession();
session.beginTransaction();
String hql = "select new com.unei.Model.ForumPost(f.pid,f.fid,f.ptitle,f.backCount,u.user_id,u.user_name,f.subject_time) from ForumPostSubject f inner join User u where f.fid="
+ section_id;
System.out.println(hql);
Query query = session.createQuery(hql);
List<ForumPost> subjects = query.list();
session.getTransaction().commit();
return subjects;
}

}


数据库表结构:

CREATE TABLE `t_user` (
`user_id` INT(11) NOT NULL AUTO_INCREMENT,
`create_time` DATETIME NULL DEFAULT NULL,
`mail` VARCHAR(255) NULL DEFAULT NULL,
`password` VARCHAR(255) NULL DEFAULT NULL,
`user_name` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`user_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=4;



CREATE TABLE `forum_post_subject` (
`pid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '帖子id',
`fid` INT(10) NOT NULL COMMENT '帖子板块id',
`ptitle` VARCHAR(100) NOT NULL COMMENT '帖子主题',
`back_count` INT(11) NOT NULL COMMENT '回帖数量',
`user_id` INT(10) NOT NULL COMMENT '发帖用户id',
`subject_time` DATETIME NOT NULL COMMENT '发帖时间',
PRIMARY KEY (`pid`)
)
COMMENT='论坛帖子数据表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3;


错误信息:
2013-07-29 16:43:45,582 ERROR org.hibernate.hql.internal.ast.ErrorCounter.reportError:54 - Path expected for join!
2013-07-29 16:43:45,583 ERROR org.hibernate.hql.internal.ast.ErrorCounter.reportError:50 - Path expected for join!
Path expected for join!
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:369)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3645)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3431)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3309)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
..............
2013-07-29 16:43:45,591 ERROR org.hibernate.hql.internal.ast.ErrorCounter.reportError:54 - Invalid path: 'u.user_id'
2013-07-29 16:43:45,591 ERROR org.hibernate.hql.internal.ast.ErrorCounter.reportError:50 - Invalid path: 'u.user_id'
Invalid path: 'u.user_id'
at org.hibernate.hql.internal.ast.util.LiteralProcessor.lookupConstant(LiteralProcessor.java:119)
at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:219)
at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:118)
at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:114)
at org.hibernate.hql.internal.ast.tree.DotNode.resolveSelectExpression(DotNode.java:660)
...........
2013-07-29 16:43:45,593 ERROR org.hibernate.hql.internal.ast.ErrorCounter.reportError:54 - Unable to locate appropriate constructor on class [com.unei.Model.ForumPost]
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.unei.Model.ForumPost]
2013-07-29 16:43:45,594 ERROR org.hibernate.hql.internal.ast.ErrorCounter.reportError:50 - Unable to locate appropriate constructor on class [com.unei.Model.ForumPost]
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.unei.Model.ForumPost]
Unable to locate appropriate constructor on class [com.unei.Model.ForumPost]
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.unei.Model.ForumPost]
at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructor(ConstructorNode.java:187)
at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:152)
at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1019)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2279)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2145)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1451)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:571)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
............

初学ssh,大家帮忙看看问题出在哪里,谢谢
...全文
726 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
9876- 2013-07-29
  • 打赏
  • 举报
回复
自己解决了 String hql = "select new com.unei.Model.ForumPost(f.pid,f.fid,f.ptitle,f.backCount,u.user_id,u.user_name,f.subject_time) from ForumPostSubject f inner join f.user u where f.fid=" + section_id; hibernate sql语法不对。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧