- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此异常仅在使用 Tweet Class
时发生。我找不到应该使用 Serializable
的原因。我自己在 GeneticMessage.hbm.xml
中进行了映射。 Tweet 类中的所有类型(long 和 Date)都是 Hibernate 中的基本类型(我认为是)。
其实只要在Exception中提到的为Tweet实现Serializable就可以解决问题。但我还是想知道原因。
方法
Domain domain = (Domain) objects[0];Query q = session.createQuery("FROM PreprocessedMessage WHERE domain = ?");q.setEntity(0, domain);return q.list(); // this line
Exception:
java.lang.ClassCastException: idv.petrie.prtm.model.Tweet cannot be cast to java.io.Serializable org.hibernate.type.CollectionType.getKeyOfOwner(CollectionType.java:381) org.hibernate.type.CollectionType.resolve(CollectionType.java:425) org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139) org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:982) org.hibernate.loader.Loader.doQuery(Loader.java:857) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) org.hibernate.loader.Loader.doList(Loader.java:2533) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) org.hibernate.loader.Loader.list(Loader.java:2271) org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452) org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268) org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) idv.petrie.prtm.model.helper.PreprocessedMessageHelper$3.execute(PreprocessedMessageHelper.java:66) idv.petrie.prtm.util.ModelHelper.execute(ModelHelper.java:36) idv.petrie.prtm.model.helper.PreprocessedMessageHelper.findMessageByDomain(PreprocessedMessageHelper.java:69) idv.petrie.prtm.servlet.MessageEvaluationServlet.doGet(MessageEvaluationServlet.java:44) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
PreprocessedMessage.java
package idv.petrie.prtm.model;import java.util.Collection;import java.util.HashSet;import java.util.Set;public class PreprocessedMessage extends GeneticMessage { private GeneticMessage message; private Set dependencies; private Set tokens; public PreprocessedMessage() { super(); } public PreprocessedMessage(GeneticMessage message, String content) { this(); this.setMessage(message); this.setContent(content); this.setDomain(message.getDomain()); } public PreprocessedMessage(GeneticMessage message) { this(message, message.getContent()); } public PreprocessedMessage(GeneticMessage message, Set dependencies) { this(message); this.dependencies = dependencies; } public static Collection convertToCollection( Collection messages) { Collection result = new HashSet(); for (GeneticMessage message : messages) { result.add(new PreprocessedMessage(message)); } return result; } public void setMessage(GeneticMessage message) { this.message = message; } public GeneticMessage getMessage() { return message; } public Set getDependencies() { return dependencies; } public void setDependencies(Set dependencies) { for (Dependency d : dependencies) { d.setMessage(this); } this.dependencies = dependencies; } public Collection getTokens() { return tokens; } public void setTokens(Set tokens) { for (Token t : tokens) { t.setMessage(this); } this.tokens = tokens; }}
Tweet.java
package idv.petrie.prtm.model;import java.util.Date;public class Tweet extends GeneticMessage { private long tweetId; private Date createdAt; private long fromUserId; public Tweet() { super(); } public Tweet(String content) { this(); setContent(content); } public Date getCreatedAt() { return createdAt; } public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; } public long getFromUserId() { return fromUserId; } public void setFromUserId(long fromUserId) { this.fromUserId = fromUserId; } public void setTweetId(long tweetId) { this.tweetId = tweetId; } public long getTweetId() { return tweetId; }}
GeneticMessage.java
package idv.petrie.prtm.model;import java.util.Date;public class GeneticMessage implements Comparable { public enum Status { NEW(0), PREPROCESSED(1); private int id; private Status(int id) { this.id = id; } public int getId() { return id; } } private long id; private Date modifiedAt; private String content; private Status status; private Domain domain; public GeneticMessage() { setModifiedAt(); setStatus(Status.NEW); } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public void setModifiedAt() { this.modifiedAt = new Date(); } public Date getModifiedAt() { return modifiedAt; } public void setStatus(Status status) { this.status = status; } public Status getStatus() { return status; } public void setDomain(Domain domain) { this.domain = domain; } public Domain getDomain() { return domain; } public int compareTo(GeneticMessage o) { String content = this.getContent(); String anotherContent = o.getContent(); return content.compareTo(anotherContent); } public void setModifiedAt(Date modifiedAt) { this.modifiedAt = modifiedAt; }}
GeneticMessage.hbm.xml
<code>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<typedef class="idv.petrie.prtm.model.GeneticMessage.Status"
name="Status">
<param name="enumClassName">idv.petrie.prtm.model.GeneticMessage.Status</param>
<param name="identifierMethod">getId</param>
</typedef>
<class name="idv.petrie.prtm.model.GeneticMessage">
<id name="id">
<generator class="native" />
</id>
<property name="modifiedAt" />
<property name="content" />
<property name="status" />
<many-to-one name="domain" class="idv.petrie.prtm.model.Domain"
cascade="all" outer-join="true" />
<joined-subclass name="idv.petrie.prtm.model.PreprocessedMessage">
<key />
<many-to-one name="message" class="idv.petrie.prtm.model.GeneticMessage"
outer-join="true" />
<set name="dependencies" cascade="save-update" inverse="true">
<key property-ref="message" />
<one-to-many class="idv.petrie.prtm.model.Dependency" />
</set>
<set name="tokens" cascade="save-update" inverse="true">
<key property-ref="message" />
<one-to-many class="idv.petrie.prtm.model.Token" />
</set>
</joined-subclass>
<joined-subclass name="idv.petrie.prtm.model.Tweet">
<key />
<property name="tweetId" unique="true" />
<property name="createdAt" />
<property name="fromUserId" />
</joined-subclass>
</class>
</hibernate-mapping>
</code>
最佳答案
这个问题已经过去了 6 年,但对于那些偶然发现这个问题的人来说,这是我的 5 美分:
tweetId
可能不是 Tweet
的主键,这就是为什么它是唯一的类这需要是可序列化的。它被报告为 Hibernate 中的错误。 (https://hibernate.atlassian.net/browse/HHH-7668)。
总结:如果你想在 Hibernate 对象之间建立关系,只需使用主键作为链接列。否则,使链接的对象可序列化,这样也可以。 :-)
关于java - 为什么在我使用 hibernate 时这个类应该实现 java.io.Serializable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4918262/
什么是 hibernate 和n- hibernate ?我可以在 Visual Studio 2008 中使用它进行 C# Web 应用程序开发吗?请给我建议...我是 asp.net Web 应用
我有一个不系统地发生的异常(exception)。 我试图通过在每次迭代中刷新和清理 session 来解决此问题,但没有成功。 [quartzScheduler_Worker-7] ERROR jd
使用 Hibernate 在数据库中存储 IP 地址的最佳类型是什么? 我虽然是 Byte[] 或 String,但有没有更好的方法,或者你用什么? @Column(name = "range_fr
我正在尝试制定一个公式来选择用户个人资料的用户友好名称。它选择名字 + ' ' + 姓氏 如果其中至少有一个不为空且不为空(包含非空白字符),否则选择 短名称 (条件相同),最后,如果 短名称 为空或
在hibernate中,是否可以将鉴别器作为一个实体?例如,如果我将 Department 作为基类,将 AdminDepartment 和 ProcessingDepartment 作为子类。 De
我只想从表中获取一些列值。因此,我已经使用投影来实现这一目标。该代码有效,但我认为它无效。 我的问题是当我使用ProjectionsList并将标准条件列表设置为ArrayList时-Bulletin
你好: 我对 hibernate 缓存缓存的内容感到困惑。 从文档中,我知道 hibernate 中有缓存类型。 一级 :交易级别。 似乎要被 session 持久化的实体被缓存在这里。 二级缓存 :
我遇到了一个情况: save或update hibernate 的目标表中的某些数据 在目标表上有一个触发器,该触发器将在目标表的insert或update操作之前执行 由 hibernate 将此记
我有一个名为 Master_Info_tbl 的表。它是一个查询表: 这是该表的代码: @Entity @Table(name="MASTER_INFO_T") public class Code
我想知道如何在 Hibernate 查询语言中使用日期文字。我在我的 JPA 项目中做了如下操作(作为 Eclipselink 提供者)并且它工作正常。 SELECT m FROM Me m WHER
@Entity public class Troop { @OneToMany(mappedBy="troop") public Set getSoldiers() { ...
我正在尝试使用 hibernate 查询删除表 'user_role' 中的所有行。但每次我都会出错。有人可以帮我吗。 DaoImpl @Override public void deleteAll(
不是将数据库操作分散在四个 (osgi) 包中,而是在那里做略有不同的事情。我想创建一个负责所有持久性问题的(简单的)OSGi 包。我觉得这并不像听起来那么简单,因为“每个包都有独特的类加载器”。 因
这就是我使用生成器的方式: private Integer id; 我看到的行为是: 创建第一个对象 hibernate 分配 id = 1 删除该对象 关闭服务
对象级别的实体和值类型有什么区别。我知道实体将有一个 id 但值不会,但为什么我们需要不同的方法来映射实体与值类型? 这样做是为了让hibernate可以对值类型应用任何优化吗? 最佳答案 一个实体已
我正在使用 HibernateTemplate.findByCriteria 方法进行一些查询。现在我想在标准上创建一些 SQL 限制,比如 criteria.add(Restrictions.sql
所以我有以下代码: Query query = session.createQuery("from Weather"); List list = query.list();
如何使用Hibernate映射具有多个实体的 View ? 问候, 混沌 最佳答案 请参见Hibernate文档中第5.1.3节“类”,紧接在“Id”节之前: There is no differen
据我所知,Hibernate 有两种类型的实现 JPA的实现(2)(@Entity,@Table注解) 扩展到旧的(传统的) hibernate (没有 JPA),使用 HSQL 查询,没有注释 如果
我需要一个将条目存储为键值对的集合(因此我可以通过键查找值),但我需要一个允许多个值使用 hibernate 共享同一个键的集合 最佳答案 一个键具有多个值的映射称为多映射 - 在 Apache 公共
我是一名优秀的程序员,十分优秀!