繁体   English   中英

将列表从多个映射到一个HQL

[英]getting list from many to one mapping HQL

从长远来看,我似乎无法从多对多的关系中获得列表。从长远来看,我既有实体又有数据访问对象,我需要类似select * from test,session where session.starttime =? AND session.id=test.sessionid;东西select * from test,session where session.starttime =? AND session.id=test.sessionid; select * from test,session where session.starttime =? AND session.id=test.sessionid;

这是我的第一个实体,其中fullSession是我的多对一个对象。

@Entity
@Table(name = "test")
public class Test {

    public Test() {
        Date date = new Date();
        startTime = new java.sql.Timestamp(date.getTime());
    }


    //the order of this models variables is coupled to the order in they appear in the view//
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "testid")
    private int testId;

    @Column(name = "intensityfeedback")
    private Integer intensityFeedback;

    @Column(name = "sampleid")
    private String sampleId;

    @Column(name = "panelistid")
    private String panelistId;

    @Column(name = "starttime")
    private Timestamp startTime;

    /*
    @Column(name = "sessionId")
    private int sessionId;
    */

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="sessionid")
    private FullSession fullSession;

    public FullSession getFullSession() {
        return fullSession;
    }

    public void setFullSession(FullSession fullSession) {
        this.fullSession = fullSession;
    }


    @Transient
    private int randomNumber;

    @Embedded
    private List<Sample> samples = new ArrayList<Sample>();

    public String getPanelistId() {
        return panelistId;
    }

    public void setPanelistId(String panelistId) {
        this.panelistId = panelistId;
    }

    public int generateRandomNumber(int numSamples) {
        Random rand = new Random();
        randomNumber = rand.nextInt(numSamples) + 1;
        return randomNumber;
    }

    public List<Sample> getSamples() {
        return samples;
    }

    public void setSamples(List<Sample> samples) {
        this.samples = samples;
    }

    public int getTestId() {
        return testId;
    }

    public void setTestId(int testId) {
        this.testId = testId;
    }

    public int getRandomNumber() {
        return randomNumber;
    }

    public void setRandomNumber(int randomNumber) {
        this.randomNumber = randomNumber;
    }

    public String getSampleId() {
        return sampleId;
    }

    public void setSampleId(String sampleId) {
        this.sampleId = sampleId;
    }

    public Integer getIntensityFeedback() {
        return intensityFeedback;
    }

    public void setIntensityFeedback(Integer intensityFeedback) {
        this.intensityFeedback = intensityFeedback;
    }

    public Timestamp getStartTime() {
        return startTime;
    }

    public void setStartTime(Timestamp startTime) {
        this.startTime = startTime;
    }

这是我的第二个实体

@Entity
@Table(name="session")
public class FullSession {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int sessionId;

    @Column(name="starttime")
    private Timestamp startTime;

    @Column(name="endtime")
    private Timestamp endTime;



    public int getSessionId() {
        return sessionId;
    }
    public void setSessionId(int sessionId) {
        this.sessionId = sessionId;
    }

    public Timestamp getStartTime() {
        return startTime;
    }
    public void setStartTime(Timestamp startTime) {
        this.startTime = startTime;
    }
    public Timestamp getEndTime() {
        return endTime;
    }
    public void setEndTime(Timestamp endTime) {
        this.endTime = endTime;
    }

最后是我的数据访问对象

package iff.spring.dao;

@Repository
public class TestDaoImpl implements TestDao {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public List<Test> getTests() {
        List<Test> tests;
        // get the current hibernate session
        Session currentSession = sessionFactory.getCurrentSession();
        // create the query
        Query<Test> query = currentSession.createQuery("from Test where FullSession.id = sessionId ", Test.class);
        // execute the query and get the result list
        tests = query.getResultList();
        // return the list// get the current hibernate session
        return tests;
    }

    @Override
    public void saveTest(List<Test> tests) {
        // get current hibernate sessions
        Session currentSession = sessionFactory.getCurrentSession();
        for (Test test : tests) {
            currentSession.save(test);
        }
    }

使用spring批注时,需要在applicationContext.xml文件中添加配置。

<context:component-scan base-package =“ pack.pack” /> //pack.pack例如:com.dao

然后,

您需要加载applicationContext.xml文件。

代码:ApplicationContext ac =新的ClassPathXmlApplicationContext(“ applicationContext.xml”);

建议您粘贴控制台错误信息!

经过反复试验,我通过以下查询获得了解决方案

Query<Test> query = currentSession.createQuery("select t from Test t INNER JOIN t.fullSession f where f.startTime = ?",Test.class) ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM