【发布时间】:2018-08-03 14:02:15
【问题描述】:
我的用户模型
@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] [[ 选择 ID,用户名 来自用户]]
但它输出两个空对象,而不是两个 User 对象
[{},{}]
我使用实体管理器的抽象道
@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
}
}
【问题讨论】:
-
这两个对象是什么类型的?
-
它应该打印两个序列化的用户对象,但它打印两个空对象...
-
是的,但字符串表示不是最可靠的调试方法。这些元素的类别是什么?即
item::class的结果是什么?它们似乎不是User的类型。 -
@Moira User::class
-
您将属性定义为 val 但它们必须是可变的。使用 var 而不是 val