我使用JPA-Hibernate的此刻,想收藏是空的,直到我调用相关的get()。 我一直在想,现在好几天没有任何成功。 我想这样做的原因是因为我使用Exterialize(或序列化),不要总是希望藏品转移到客户端发送的序列化的字符串时在那里。
@Entity
public class Thread implements Externalizable {
static final long serialVersionUID = 9L;
@OneToMany(mappedBy = "parentThread", fetch = FetchType.LAZY)
@LazyCollection(LazyCollectionOption.EXTRA)
public Collection<Reply> getReplies() {
return replies;
}
这里是回复模式:
@Entity
public class Reply implements Externalizable {
static final long serialVersionUID = 8L;
@ManyToOne
@JoinColumn(name = "threadId", referencedColumnName = "id", nullable = false)
public Thread getParentThread() {
return parentThread;
}
这段代码是我用序列化模型:
public static final String serialize(Serializable object) throws IOException, ClassNotFoundException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream( baos );
oos.writeObject( object );
oos.close();
BASE64Encoder base64Encoder = new BASE64Encoder();
return new String( base64Encoder.encode(baos.toByteArray()));
}
这是我用它来找到线程对象
models.Thread thread = em.find(models.Thread.class, threadId);
如果我使用entityManager.find()或查询它仍然加载回复列表。 所以要格外清楚,我想集合为空时,我产生的实体。 然后,如果我调用get(),我想它填满。
下图显示了答复存储在列表中。 他们没有在他们的任何值whitch我相信是因为懒加载意味着他们还没有真正从数据库中获取代理实体? 请更正,如果我错了。 作为一个侧面说明,如果有可能存储列表作为ArrayList或者其他一些标准的列表实现,将是巨大的。 据我所知,JPA希望persistentBag / persistentSet符号,因为他们可以拥有标准的实施不允许,可能有一些其他的原因藏汉重复值。 但是对于序列化模型到客户端将是巨大的不需要的库,他们也似乎没有与Android合作,因为该SSID似乎采用了android当库改变。
我真的希望这是可能的。 Thx提前!