2016-02-19 35 views
2

我是Kotlin的新手,我希望将我的java模型类与数据类进行转换,这有可能吗?我的意思是Ormlite是否支持这个?Kotlin 100%支持Ormlite吗? (Data classes)

+1

我JPA试了一下,它不与科特林工作得非常好,这里是我的问题:http://stackoverflow.com/questions/32038177/kotlin-with-jpa-default-constructor-hell。虽然不知道Ormlite,但如果它确实会很高兴。 – hotkey

+0

你能解释一下Ormlite如何使用类?它构造它们,如果是这样,它需要一个空的默认构造函数?你尝试过一个实验吗? –

回答

2

我将我的daos正常上课没有问题

import com.j256.ormlite.field.DatabaseField 
import com.j256.ormlite.table.DatabaseTable 

@DatabaseTable(tableName = HabitDao.TABLE) 
class HabitDao() { 

    companion object { 
     const val TABLE = "habitdao" 
     const val ORDER = "order" 
     const val ID = "id" 
    } 

    @DatabaseField(columnName = ID, generatedId = true) 
    var id: Int = 0 

    @DatabaseField(index = true) 
    lateinit var title: String 

    @DatabaseField 
    lateinit var intention: String 

    @DatabaseField(columnName = ORDER) 
    var order: Int = 0 

    constructor(title: String, intention: String) : this() { 
     this.title = title 
     this.intention = intention 
    } 

    override fun toString(): String { 
     return title 
    } 
} 

你只需要提供空构造函数(见一个类定义)。此外,lateinit使属性稍后更易于使用。

编辑:当您需要序列化这些对象时,数据类似乎添加了很有用的功能。 Ormlite能够处理正常的a.k.a. Java类,因此不需要这样做。此外,数据类预计包含构造函数中的所有字段,并且不希望id字段在该处存在。

0

不,ORMLite不能与Kotlin数据类(版本1.1.2以上)一起使用,因为ORMLite要求使用@DatabaseField注释字段,这对于使用数据类语法声明的字段是不可能的。

1

我用OrmLite和Kotlin的数据类没有问题。关键是要为所有字段指定默认值,然后科特林生成一个空的构造的数据类:

@DatabaseTable(tableName = "sample_table") 
data class SampleRecord(
     @DatabaseField(id = true) 
     var id: String? = null, 

     @DatabaseField(canBeNull = false) 
     var numField: Int? = null, 

     @DatabaseField 
     var strField: String = "", 

     @DatabaseField 
     var timestamp: Date = Date() 
) 

» Working example on GitHub