我的用户模型
@Entity
@Table(name="users")
data class User(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = -1,
@Column(unique=true)
val username: String) : Serializable
数据库中的两条记录
查询没问题。
[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
}
}
答案 0 :(得分:1)
您应该使用var
而不是val
,因为Kotlin不会为val
字段设置制定者。 JPA需要具有可变属性(这意味着getter&amp; setter)。
TLDR:使用var
代替val