简体   繁体   English

HQL SELECT多个表直接进入类

[英]HQL SELECT multiple tables directly into class

So I'm trying to get all columns of 2 tables into my custom created class without looping into the array. 因此,我试图将2个表的所有列都放入自定义创建的类中,而无需循环到数组中。 But I cant make it work. 但是我不能使它工作。

Here is my classes: 这是我的课程:

SampleForm: SampleForm:

public class SampleForm {
    List<Tbaudittrail> audittrail;
    List<Tbauditevents> auditevents;

    public SampleForm(List<Tbaudittrail> audittrail, List<Tbauditevents> auditevents) {
        super();
        this.audittrail = audittrail;
        this.auditevents = auditevents;
    }
    public List<Tbaudittrail> getAudittrail() {
        return audittrail;
    }
    public void setAudittrail(List<Tbaudittrail> audittrail) {
        this.audittrail = audittrail;
    }
    public List<Tbauditevents> getAuditevents() {
        return auditevents;
    }
    public void setAuditevents(List<Tbauditevents> auditevents) {
        this.auditevents = auditevents;
    }

Tbaudittrail: Tbaudittrail:

public class Tbaudittrail {

    private Integer audittrailid;
    private String eventname;
    private String eventdescription;
    private String username;
    private Date eventdatetime;

    public Tbaudittrail(Integer audittrailid, String eventname, String eventdescription, String username,
            Date eventdatetime) {
        super();
        this.audittrailid = audittrailid;
        this.eventname = eventname;
        this.eventdescription = eventdescription;
        this.username = username;
        this.eventdatetime = eventdatetime;
    }
    public Tbaudittrail() {
    }
    public Integer getAudittrailid() {
        return audittrailid;
    }

    public void setAudittrailid(Integer audittrailid) {
        this.audittrailid = audittrailid;
    }

    public String getEventname() {
        return eventname;
    }

    public void setEventname(String eventname) {
        this.eventname = eventname;
    }

    public String getEventdescription() {
        return eventdescription;
    }

    public void setEventdescription(String eventdescription) {
        this.eventdescription = eventdescription;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getEventdatetime() {
        return eventdatetime;
    }

    public void setEventdatetime(Date eventdatetime) {
        this.eventdatetime = eventdatetime;
    }

Tbauditevents: Tbaudit事件:

public class Tbauditevents {

    private Integer eventid;
    private String eventname;

    public Tbauditevents(Integer eventid, String eventname) {
        super();
        this.eventid = eventid;
        this.eventname = eventname;
    }

    public Tbauditevents() {
    }

    public Integer getEventid() {
        return eventid;
    }

    public void setEventid(Integer eventid) {
        this.eventid = eventid;
    }

    public String getEventname() {
        return eventname;
    }

    public void setEventname(String eventname) {
        this.eventname = eventname;
    }

Using SELECT new 使用SELECT new

Query query = session.createQuery("SELECT new com.project.audit.forms.SampleForm(audittrail,auditevents) FROM Tbaudittrail audittrail,Tbauditevents auditevents WHERE auditevents.eventid=audittrail.audittrailid");
List<SampleForm> customList = query.list();

I got this error : 我收到此错误:

org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.project.audit.forms.SampleForm]

I've also tried using ResultTransformer but is not working. 我也尝试使用ResultTransformer,但无法正常工作。

Tbaudittrail and Tbauditevents are mapped while SampleForm is not. Tbaudittrail和Tbauditevents被映射,而SampleForm没有。 I'm using MS SQL SERVER. 我正在使用MS SQL SERVER。

Your problem is the SampleForm constructor. 您的问题是SampleForm构造函数。 You will not receive a List in each parameter, but a single entity. 您不会在每个参数中收到一个List ,而是一个实体。

So, the correct constructor is: 因此,正确的构造函数是:

public SampleForm (Tbaudittrail audittrail, Tbauditevents auditevents) {
    super();
    this.audittrail = audittrail;
    this.auditevents = auditevents;
}

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

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