Java
ORM
Sql2o

sql2oでComposite(Nested)なPOJOとのマッピング方法

More than 1 year has passed since last update.

sql2o( http://www.sql2o.org )で以下のようなComposite(Nested)なPOJOをマッピングする方法について記載します.

まず, sql2oでは以下のPOJOのAccountに含まれるRoleクラスをマッピングしてはくれません.

public class Account implements Serializable {

private long id;

private String name;

private Role role;

// getter , setter
}

しかし, Accountクラスのroleフィールドをpulicスコープにすることでマッピングを行なってくれます.

public class Account implements Serializable {

private long id;

private String name;

public Role role;

// getter , setter
}

このroleにマッピングするためのsqlの書き方は以下です.

 String sql = 

"SELECT A.id, A.name, B.role AS \"role.name\" " +
"FROM account A, role B " +
"WHERE A.id = B.accountid AND A.id = :accountId ";

実行自体は今まで通りです.

try(Connection con = sql2o.open()) {

List<Account> AccountList = con.createQuery(sql) // 中身は一つ
.addParameter("accountId", accountId)
.executeAndFetch(Account.class);
}

publicフィールドにするのは見解が異なりそうなのですが, この方法でできます.

privateフィールドだと可視性に問題で参照できないエラーが出ていたけど、privateフィールドでできたということがあればぜひ教えていただきたい

参考Forum

https://groups.google.com/forum/m/#!topic/sql2o/eucKt1vVh9o