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();
}
}
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)