java - 当key属性在子表+spring mvc和hibernate中时如何过滤数据

标签 java mysql hibernate spring-mvc hibernate-mapping

有2个表,Parent是MeetingTypes Child是Meetings they have1 : m mapping session 有 releaseID 属性,所以我想通过 releaseID 过滤它。但问题是,它在子表中...... 如果它是父表,我们可以简单地做到这一点并且它正在工作

Query query = session.getCurrentSession().createQuery("from MeetingTypes where releaseID= :releaseID");
    query.setParameter("releaseID", releaseID);
    List list = query.list();       
     if(list!=null && list.size()>0){
        return  list;
    }else{
    return null;
    }

我这样试过

Query query = session.getCurrentSession().createSQLQuery(
                  "from MeetingTypes mt join mt.Meetings m " +
                          "where m.releaseID = :releaseID");

        query.setParameter("releaseID", releaseID);

        return query.list();

但是给出下面的错误

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from MeetingTypes mt join mt.Meetings m where m.releaseID = 192' at 
line 1

相关表格

package pearson.dashboard.model;

import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;



@Entity
public class MeetingTypes {
    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int meetingTypeID;
    @Column
    private String typeName;
    @OneToMany(mappedBy = "meetingTypes",fetch = FetchType.EAGER)

    private List<Meetings> meetings;
    public List<Meetings> getMeetings() {
        return meetings;
    }

    public void setMeetings(List<Meetings> meetings) {
        this.meetings = meetings;
    }

    public MeetingTypes() {

        // TODO Auto-generated constructor stub
    }

    public MeetingTypes(int meetingTypeID, String typeName
            ) {
        super();
        this.meetingTypeID = meetingTypeID;
        this.typeName = typeName;

    }

    public int getMeetingTypeID() {
        return meetingTypeID;
    }

    public void setMeetingTypeID(int meetingTypeID) {
        this.meetingTypeID = meetingTypeID;
    }

    public String getTypeName() {
        return typeName;
    }

    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }



}

package pearson.dashboard.model;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import org.springframework.context.annotation.Lazy;

@Entity
public class Meetings {
    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int meetingID;
    @Column
    private Date sheduleTime;
    @Column
    private String meetingHeading;
    @Column 
    private String comment;
    @Column
    private String roomName;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "meetingTypeID") 
    private MeetingTypes meetingTypes;






    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "releaseID") 
    private Releases releases;


    public Releases getReleases() {
        return releases;
    }

    public void setReleases(Releases releases) {
        this.releases = releases;
    }






    public MeetingTypes getMeetingTypes() {
        return meetingTypes;
    }

    public void setMeetingTypes(MeetingTypes meetingTypes) {
        this.meetingTypes = meetingTypes;
    }

    public Meetings() {

        // TODO Auto-generated constructor stub
    }

    public Meetings(int meetingID, Date sheduleTime, String meetingHeading,
            String comment, String roomName) {
        super();
        this.meetingID = meetingID;
        this.sheduleTime = sheduleTime;
        this.meetingHeading = meetingHeading;
        this.comment = comment;
        this.roomName = roomName;

    }

    public int getMeetingID() {
        return meetingID;
    }

    public void setMeetingID(int meetingID) {
        this.meetingID = meetingID;
    }

    public Date getSheduleTime() {
        return sheduleTime;
    }

    public void setSheduleTime(Date sheduleTime) {
        this.sheduleTime = sheduleTime;
    }

    public String getMeetingHeading() {
        return meetingHeading;
    }

    public void setMeetingHeading(String meetingHeading) {
        this.meetingHeading = meetingHeading;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public String getRoomName() {
        return roomName;
    }

    public void setRoomName(String roomName) {
        this.roomName = roomName;
    }




}

package pearson.dashboard.model;
import java.util.Date;
import java.util.List;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
public class Releases {
    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int releaseID;  
    @Column
    private String orcleCode;
    @Column
    private String status;
    @Column
    private Date staging;
    @Column
    private Date cabCall;
    @Column 
    private Date rrr;
    @Column
    private String remarks;
    @Column
    private String releaseName;
    @Column 
    private Date prodDate;  

    @ManyToOne( fetch = FetchType.EAGER)
    @JoinColumn(name = "teamID")
    private Teams teams;

    public Teams getTeams() {
        return teams;
    }
    public void setTeams(Teams teams) {
        this.teams = teams;
    }










    @OneToMany(mappedBy = "releases",fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    private List<Meetings> meetings;        

    public List<Meetings> getMeetings() {
        return meetings;
    }
    public void setMeetings(List<Meetings> meetings) {
        this.meetings = meetings;
    }
















    public Releases() {}
    public Releases(int releasID, String orcleCode, String status,
            Date staging, Date cabCall, Date rrr, String remarks,
            String releaseName,Date prodDate) {
        super();
        this.releaseID = releasID;
        this.orcleCode = orcleCode;
        this.status = status;
        this.staging = staging;
        this.cabCall = cabCall;
        this.rrr = rrr;
        this.remarks = remarks;
        this.releaseName = releaseName;
        this.prodDate = prodDate;
    }

    public int getReleaseID() {
        return releaseID;
    }
    public void setReleaseID(int releaseID) {
        this.releaseID = releaseID;
    }

    public String getOrcleCode() {
        return orcleCode;
    }
    public void setOrcleCode(String orcleCode) {
        this.orcleCode = orcleCode;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public Date getStaging() {
        return staging;
    }
    public void setStaging(Date staging) {
        this.staging = staging;
    }
    public Date getCabCall() {
        return cabCall;
    }
    public void setCabCall(Date cabCall) {
        this.cabCall = cabCall;
    }
    public Date getRrr() {
        return rrr;
    }
    public void setRrr(Date rrr) {
        this.rrr = rrr;
    }
    public String getRemarks() {
        return remarks;
    }
    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }
    public String getReleaseName() {
        return releaseName;
    }
    public void setReleaseName(String releaseName) {
        this.releaseName = releaseName;
    }
    public Date getProdDate() {
            return prodDate;
        }
    public void setProdDate(Date prodDate) {
            this.prodDate = prodDate;
        }           

}

Controller 的一部分******

import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import pearson.dashboard.dto.NewMeeting;
import pearson.dashboard.service.MeetingService;
import pearson.dashboard.service.MeetingTypeService;
import pearson.dashboard.service.MemberService;
import pearson.dashboard.service.SwarmingScheduleService;

@Controller
public class MeetingTypesController {
@Autowired
private MeetingTypeService  meetingTypeService;
//@Autowired
//private MeetingService meetingService;
@Autowired
private SwarmingScheduleService swarmingScheduleService;
@Autowired
private MemberService memberService;

@RequestMapping(value="/detailsPage",method=RequestMethod.POST)
public String getAllmeeting(@ModelAttribute NewMeeting newMeeting,BindingResult result,Map<String, Object> map){
    int releaseID = newMeeting.getReleaseID();


    map.put("meetingList", meetingTypeService.getAllMeetingTypes(releaseID));   
    map.put("swarmingScheduleList",swarmingScheduleService.gettAllSwarming() );
    map.put("memberList",memberService.gettAllMembers() );
    return "details";







}

最佳答案

您使用的是 HQL 而不是 sql,因此在 hql 中没有像 join 这样的关键字,或者您可以使用 objecta.objectb 等实现连接,因此您必须像下面这样创建查询

Query query = session.getCurrentSession().createQuery("FROM MeetingTypes mt WHERE mt.meetings.releases.id = :releaseID");

更多详情请看下面的链接

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins-forms

关于java - 当key属性在子表+spring mvc和hibernate中时如何过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20400230/

相关文章:

mysql - 在 PHPMyAdmin 中查看变量

java - 两个 "like"查询组合并排序

java - @StaticMetamodel 和 SingularAttribute<Obj,Obj> 是什么?

java - 使用 REGEX 提取数据

java - 在泛型方法中使用约束类型

mysql - 返回具有相同值的最大行数的值

java - Hibernate Native 与 Hibernate JPA

Java 验证证书是否与 key 相关联

java - 方法签名中的对象数组

mysql - 将 .bak 文件转换为 .sql 文件