2012-10-24 86 views
1

我有2个班ORMLite查询外键

列表

@DatabaseTable(tableName = "loginsList") 
public class LoginsList { 

    @DatabaseField(columnName = "loginListID", generatedId = true) 
    private int loginListID; 
    @DatabaseField(columnName = "listName") 
    private String listName; 
    @DatabaseField(columnName = "listDescription") 
    private String listDescription; 
    @DatabaseField(columnName = "current") 
    private boolean current; 
    @DatabaseField(columnName = "sent") 
    private boolean sent; 

登录

@DatabaseTable(tableName = "login") 
public class Login { 
    @DatabaseField(columnName = "loginID", generatedId = true) 
    private int loginID; 
    @DatabaseField(columnName = "user", foreign=true) 
    private User user; 
    @DatabaseField(columnName = "loggedIn") 
    private boolean loggedIn; 
    @DatabaseField(columnName = "loginTime") 
    private long loginTime; 
    @DatabaseField(columnName = "logoutTime") 
    private long logoutTime; 
    @DatabaseField(columnName = "loginsList", foreign = true) 
    private LoginsList loginsList; 

我用ORMLite数据库。我想知道如何获得列表的所有登录信息?我想这样的

tempLoginList = loginDao.queryForEq("loginsList", list); 

其中列表类型LoginsList的,这是清单我想要得到所有登录,但它不工作。如何使用查询生成器执行此操作?

回答

2
tempLoginList = loginDao.queryForEq("loginsList", list); 

这应该可以正常工作。这里有几件事要检查,可能会阻碍。

  • ORMLite存储在Login一个int作为从LoginsListloginListID字段。当您将一个列表与Login关联时,它必须已经在数据库中创建了,因此其ID已经生成。

  • 如果你看看你的查询日志(打开logging的东西,如以下log4j属性,你应该可以看到相关的查询。您应该能够看到login id字段被查询的,你需要确保它是正确的。

    log4j.logger.com.j256.ormlite=DEBUG 
    # to enable logging of arguments to all of the SQL calls 
    # uncomment the following lines 
    log4j.logger.com.j256.ormlite.stmt.mapped.BaseMappedStatement=TRACE 
    #log4j.logger.com.j256.ormlite.stmt.mapped.MappedCreate=TRACE 
    #log4j.logger.com.j256.ormlite.stmt.StatementExecutor=TRACE 
    

我有很多的单元测试,但没有专门围绕dao.queryForEq(...)和国外各个领域。我只是将它们添加到代码库和他们很好地工作。这是我的日志输出可能帮助:

[DEBUG] BaseMappedStatement insert data with statement 'INSERT INTO `foo` (`val` ,`equal` ,`null`) VALUES (?,?,?)' and 3 args, changed 1 rows 
[TRACE] BaseMappedStatement insert arguments: [1231231, 0, null] 
[DEBUG] BaseMappedStatement assigned id '1' from keyholder to 'id' in Foo object 
[DEBUG] BaseMappedStatement insert data with statement 'INSERT INTO `foreign` (`foo_id`) VALUES (?)' and 1 args, changed 1 rows 
[TRACE] BaseMappedStatement insert arguments: [1] 
[DEBUG] BaseMappedStatement assigned id '1' from keyholder to 'id' in Foreign object 
[DEBUG] StatementBuilder built statement SELECT * FROM `foreign` WHERE `foo_id` = 1 
[DEBUG] BaseMappedStatement prepared statement 'SELECT * FROM `foreign` WHERE `foo_id` = 1 ' with 0 args 
[DEBUG] SelectIterator starting iterator @1781793025 for 'SELECT * FROM `foreign` WHERE `foo_id` = 1 ' 
[DEBUG] SelectIterator closed iterator @1781793025 after 1 rows 
[DEBUG] StatementExecutor query of 'SELECT * FROM `foreign` WHERE `foo_id` = 1 ' returned 1 results