ORMLite внешний ключ запроса
У меня 2 класса
Список
@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 и это список, для которого я хочу получить все логины, но он не работает. Как это сделать с помощью построителя запросов?
1 ответ
tempLoginList = loginDao.queryForEq("loginsList", list);
Это должно работать нормально. Вот пара вещей, чтобы проверить, что может мешать.
ORMLite хранит
int
вLogin
какойloginListID
поле изLoginsList
, Когда вы связываете список сLogin
должно быть, он уже был создан в базе данных, поэтому его идентификатор уже создан.Если вы посмотрите журналы ваших запросов (включите ведение журнала с помощью чего-то вроде следующих свойств 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