1

So I'm trying to get all columns of 2 tables into my custom created class without looping into the array. But I cant make it work.

Here is my classes:

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:

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:

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

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.

Tbaudittrail and Tbauditevents are mapped while SampleForm is not. I'm using MS SQL SERVER.

Dherik
  • 17,757
  • 11
  • 115
  • 164
Dekso
  • 11
  • 2
  • 1. Create a constructor in SampleForm with parameters. 2. Your query return a constructor with two scalar elements and not two listes – Joe Taras Apr 20 '18 at 07:54
  • 1
    Hi Sir, see my edit I added constructor is it correct? 2. How do I make it return listes? – Dekso Apr 20 '18 at 08:45
  • your query return a List of SampleForm, one for each row of the resultSet. What are the types of audittrail,auditevents? you need a constructor with those parameters – Zeromus Apr 20 '18 at 10:54
  • 1
    Sir, please see my edit. I inlcuded the audittrail and auditevents. – Dekso Apr 20 '18 at 11:15

1 Answers1

0

Your problem is the SampleForm constructor. You will not receive a List in each parameter, but a single entity.

So, the correct constructor is:

public SampleForm (Tbaudittrail audittrail, Tbauditevents auditevents) {
    super();
    this.audittrail = audittrail;
    this.auditevents = auditevents;
}
Dherik
  • 17,757
  • 11
  • 115
  • 164