Как использовать дату Joda DateTime в качестве идентификатора в комнате или как получить дату в запросе? - PullRequest
0 голосов
/ 09 мая 2019

Мне нужно написать приложение, которое использует дату в качестве идентификатора, и я должен иметь возможность обновлять, просто сравнивая дату

@Entity
data class DailyCount(@PrimaryKey
                  var date:DateTime,
                  var summ: Double = 0.0)

А вот и ДАО

@Query("update DailyCount set summ = :sum where date = :today")
fun updateCash(today: DateTime, sum: Double)

Я хочу сделать так:

@Entity
data class DailyCount(@PrimaryKey
                  var date:Date,//JodaTime containing only date
                  var summ: Double = 0.0)

Или вот так:

@Query("update DailyCount set summ = :sum where date.today = :dateArg.today")
fun updateCash(dateArg: DateTime, sum: Double)

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Комната не знает, как сохранить ваше основное поле DateTime в базе данных.

Вам необходимо написать TypeConverter.

public class TypeConverter {
    private static Gson gson = new Gson();

    @TypeConverter
    public static DateTime stringToDate(String data) {

        Type type = new TypeToken<DateTime>() {
        }.getType();

        return gson.fromJson(data, type);
    }

    @TypeConverter
    public static String dateToString(DateTime dateTime) {
        return gson.toJson(dateTime);
    }
}

Затем аннотируйте свой первичный ключ

@PrimaryKey
@TypeConverters(TypeConverter::class.java)
var date:DateTime
0 голосов
/ 09 мая 2019

Мне нужно было написать этот запрос:

@Query("update DailyCount set summ = :sum where date between  :startTimeOfDay and :endTimeOfDay")
fun updateCash(startTimeOfDay: DateTime, endTimeOfDay: DateTime, sum: Double)

Я дал здесь диапазон времени начала и окончания.Этот подход возвращает true, когда я хочу установить информацию в сегодняшнем идентификаторе

...