How to inner join 2 tables properly?

43 views
Skip to first unread message

Andre Tampubolon

unread,
Jun 19, 2018, 9:44:35 PM6/19/18
to ORMLite Users
Hello, I have these 2 tables.

First is tbl_employee:
CREATE TABLE tbl_employee (
 id INT
(4) PRIMARY KEY,
 firstname VARCHAR
(20),
 lastname VARCHAR
(20),
 email VARCHAR
(40),
 status INT
(1) REFERENCES tbl_employee_status (code)
);


And tbl_employee_status:

CREATE TABLE tbl_employee_status (
 code INT
(1) PRIMARY KEY,
 description VARCHAR
(30)
);


What I want to do is doing this via ORMLite:

select firstname, lastname, email, description from tbl_employee inner join tbl_employee_status where tbl_employee_status.code = tbl_employee.status

I attached my Java codes here.


Employee.java

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "tbl_employee")
public class Employee {
   
public static final String FIRSTNAME_FIELD = "firstname";
   
public static final String LASTNAME_FIELD = "lastname";
   
public static final String EMAIL_FIELD = "email";
   
public static final String STATUS_FIELD = "status";
 
   
@DatabaseField(columnName = FIRSTNAME_FIELD)
   
private String firstname;
   
   
@DatabaseField(columnName = LASTNAME_FIELD)
   
private String lastname;
 
   
@DatabaseField(columnName = EMAIL_FIELD)
   
private String email;
   
   
@DatabaseField(columnName = STATUS_FIELD)
   
private String status;
}

EmployeeStatus.java

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "tbl_employee_status")
public class EmployeeStatus {

   
public static final String CODE_FIELD = "code";
   
public static final String DESCRIPTION_FIELD = "description";

   
@DatabaseField(columnName = CODE_FIELD, foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
   
private String code;
   
   
@DatabaseField(columnName = DESCRIPTION_FIELD)
   
private String status;    
}


EmployeeDB.java

import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.jdbc.JdbcConnectionSource;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.stmt.QueryBuilder;
import java.util.List;
import java.io.IOException;

public class EmployeeDB {
   
private final static String DATABASE_URL = "jdbc:sqlite:C://MyDB//db_employee.db";
   
private static Dao EmployeeDao;
   
private static Dao EmployeeStatusDao;


   
public static void main(String[] args) throws Exception {
       
ConnectionSource connectionSource = null;
        connectionSource
= new JdbcConnectionSource(DATABASE_URL);
       
EmployeeDao = DaoManager.createDao(connectionSource, Employee.class);
       
EmployeeStatusDao = DaoManager.createDao(connectionSource, EmployeeStatus.class);
       
       
QueryBuilder qb1 = EmployeeDao.queryBuilder();
       
QueryBuilder qb2 = EmployeeStatusDao.queryBuilder();
        qb1
.join(qb2).where().eq(Employee.STATUS_FIELD, EmployeeStatus.CODE);

       
List<Employee> employeeList = qb1.query();
   
}
 
}


There's something wrong, though:
Exception in thread "main" java.lang.IllegalArgumentException: No fields have a DatabaseField annotation in class java.lang.String
at com.j256.ormlite.table.DatabaseTableConfig.extractFieldTypes(DatabaseTableConfig.java:249)
at com.j256.ormlite.table.DatabaseTableConfig.fromClass(DatabaseTableConfig.java:176)
at com.j256.ormlite.table.TableInfo.<init>(TableInfo.java:55)
at com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:156)

How to do inner join properly, then? 
Reply all
Reply to author
Forward
0 new messages