Java Hibernate多对多HQL查询
我有如下具有多对多关系的表:Java Hibernate多对多HQL查询,java,hibernate,join,many-to-many,hql,Java,Hibernate,Join,Many To Many,Hql,我有如下具有多对多关系的表: Clubmember(member\u id int(11)非空自动增量, 成员名称varchar(50),地址varchar(100)) 胶片(胶片id int(11)非空自动增量 标题varchar(50),发布日期varchar(10)) 租金(会员id int(11)不为空, 胶片id int(11)不为空 主键(filmId、成员id), 外键(成员id)引用(clubMember.memberId), 外键(film_id)引用(film.filmId)
Clubmember(member\u id int(11)非空自动增量,
成员名称varchar(50),地址varchar(100))
胶片(胶片id int(11)非空自动增量
标题varchar(50),发布日期varchar(10))
租金(会员id int(11)不为空,
胶片id int(11)不为空
主键(filmId、成员id),
外键(成员id)引用(clubMember.memberId),
外键(film_id)引用(film.filmId)
)
并使用多对多注释对类进行建模,如下所示:
@Entity
@Table(name="ClubMember")
public class ClubMember {
@Id @GeneratedValue
@Column(name="member_id")
private int memberId;
@Column (name="member_name")
private String name;
@Column (name="address")
private String address;
@ManyToMany(fetch=FetchType.LAZY,mappedBy="renter")
private Set<Film> rentedFilm=new HashSet<Film>();
....
}
@Entity
@Table(name="Film")
public class Film {
@Id @GeneratedValue
@Column(name="film_id")
private int filmId;
@Column (name="title")
private String filmTitle;
@Column (name="release_date")
private String releaseDate;
@ManyToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinTable(name="RENT",
joinColumns={@JoinColumn(name="film_id")},
inverseJoinColumns={@JoinColumn(name="member_id")})
private Set<ClubMember> renter=new HashSet<ClubMember>();
}
我尝试使用HQL,但发现了一些问题:
我试过这样的东西
"Select F.filmId, F.filmTitle, M.name From Film F join F.renter M where F.filmId = :fId and M.memberId=:mId "
并从以下两个查询中为fId
和mId
提供参数:
从ClubMember中选择memberId
和从Film中选择filmId
但结果是HQL查询的格式错误,出现异常
线程“main”org.hibernate.hql.ast.QuerySyntaxException中的异常:意外标记:,靠近第1行第116列[从com.mycontact.manytomy.Film中选择F.filmId、F.filmTitle、M.name加入F.renter M,其中F.filmId=:fId0_u、:fId1_u、:fId2_u和M.memberId=:mId0_0、:mId1_0]
事实上,我不太清楚如何使用HQL查询此类请求。谁能给点提示吗
用于hibernate的JAR版本: hibernate注释:3.3.0.GA hibernate commons注释:3.0.0.GA hibernate-c3p0:3.6.3.4最终版本 创建查询:
List listFilmId=session.createQuery("Select F.filmId from Film F").list();
List listMemberId=session.createQuery("Select M.memberId from ClubMember M").list();
Query diffQuery=session.createQuery("Select F.filmId, F.filmTitle, M.name "
+ " From Film F join F.renter M where F.filmId = :fId and M.memberId=:mId ");
diffQuery.setParameterList("fId", listFilmId);
diffQuery.setParameterList("mId", listMemberId);
如何创建查询?Hibernate和相关JAR的版本是什么?Hibernate的JAR版本:Hibernate注释:3.3.0.GA Hibernate commons注释:3.0.0.GA Hibernate-c3p0:3.6.3。最后,如何创建查询?Hibernate和相关JAR的版本是什么?Hibernate的JAR版本:Hibernate注释:3.3.0.GA Hibernate commons注释:3.0.0.GA Hibernate-c3p0:3.6.3.Final
List listFilmId=session.createQuery("Select F.filmId from Film F").list();
List listMemberId=session.createQuery("Select M.memberId from ClubMember M").list();
Query diffQuery=session.createQuery("Select F.filmId, F.filmTitle, M.name "
+ " From Film F join F.renter M where F.filmId = :fId and M.memberId=:mId ");
diffQuery.setParameterList("fId", listFilmId);
diffQuery.setParameterList("mId", listMemberId);