JPA返回空对象

时间:2018-02-23 13:38:11

标签: jpa kotlin

我的用户模型

@Entity
@Table(name="users")
data class User(
        @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Long = -1,
        @Column(unique=true)
        val username: String) : Serializable

数据库中的两条记录

database

查询没问题。

  

[2018-02-23T14:32:07.066 + 0100] [Payara 4.1] [FINE] []   [org.eclipse.persistence.session./file:/Users/youri/Downloads/payara41/glassfish/domains/domain1/applications/Kwetter-1.0-SNAPSHOT/WEB-INF/classes/_kwetter.sql]   [tid:_ThreadID = 28 _ThreadName = http-thread-pool :: http-listener-1(4)]   [timeMillis:1519392727066] [levelValue:500] [[ SELECT ID,USERNAME   来自用户]]

但它会输出两个空对象,而不是两个用户对象

[{},{}]

我使用实体管理器的抽象Dao

@Stateless
abstract class Abstract<T : Serializable> {
    @PersistenceContext
    private lateinit var entityManager: EntityManager

    abstract fun getEntityClass(): Class<T>

    open fun find(id: Long): T {
        return entityManager.find(getEntityClass(), id)
    }

    // this returns the weird two empty objects
    open fun all(): List<T> {
        val builder = entityManager.criteriaBuilder
        val c = builder.createQuery(getEntityClass())
        c.from(getEntityClass())
        val query = entityManager.createQuery(c)

        return query.resultList
    }
}

1 个答案:

答案 0 :(得分:1)

您应该使用var而不是val,因为Kotlin不会为val字段设置制定者。 JPA需要具有可变属性(这意味着getter&amp; setter)。

TLDR:使用var代替val