【问题标题】:Hibernate Error while persisting TEXT datatype持久化 TEXT 数据类型时出现休眠错误
【发布时间】:2014-09-25 11:51:39
【问题描述】:

使用 hibernate 和 mysql 5.5,我试图在数据库表的 TEXT 类型列中保留字符串值。

厌倦了在提到的列中设置字符串值并尝试保留数据。但我遇到了以下异常。我使用 Netbeans 8.0 生成了实体类。



例外:-

FATAL:   JSF1073: javax.faces.FacesException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=, Message=/addNewCategory.xhtml @30,151 actionListener="#{categoryBean.addCategoryAction}": java.lang.AbstractMethodError: com.mysql.jdbc.ServerPreparedStatement.setCharacterStream(ILjava/io/Reader;J)V
FATAL:   /addNewCategory.xhtml @30,151 actionListener="#{categoryBean.addCategoryAction}": java.lang.AbstractMethodError: com.mysql.jdbc.ServerPreparedStatement.setCharacterStream(ILjava/io/Reader;J)V
javax.faces.FacesException: /addNewCategory.xhtml @30,151 actionListener="#{categoryBean.addCategoryAction}": java.lang.AbstractMethodError: com.mysql.jdbc.ServerPreparedStatement.setCharacterStream(ILjava/io/Reader;J)V
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:89)

创建 SQL:-

 CREATE TABLE `oc_category_description` (
      `category_id` int(11) NOT NULL,
      `language_id` int(11) NOT NULL,
      `name` varchar(255) NOT NULL,
      `description` text NOT NULL,
      `meta_description` varchar(255) NOT NULL,
      `meta_keyword` varchar(255) NOT NULL,
      PRIMARY KEY (`category_id`,`language_id`),
      KEY `name` (`name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

实体类

@Entity
@Table(name = "oc_category_description")
@XmlRootElement
public class OcCategoryDescription implements Serializable {
    private static final long serialVersionUID = 1L;

    @Basic(optional = false)
    @NotNull
    @Lob
    @Size(min = 1, max = 65535)
    @Column(name = "description")
    private String description;

     public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}
    //Constructors, setters, getters, equals and hashcode
}

在提出问题之前,我浏览了以下链接,这些链接几乎没有帮助。



  • 我还尝试通过删除@Lob 来持久化数据,它将数据保存为“org.hibernate.engine.jdbc.BlobProxy@11e84b60”
  • 我尝试了using @Column(columnDefinition = "TEXT") 而不是@Lob,再次给出相同的结果。 "org.hibernate.engine.jdbc.BlobProxy@11e84b60"
  • 我尝试@Type(type="text")而不是@Lob,再次给出相同的结果。 "org.hibernate.engine.jdbc.BlobProxy@11e84b60"

【问题讨论】:

  • 尝试从实体类中移除 Lob 和 Basic 注解
  • 试过了。它的保存类似于“org.hibernate.engine.jdbc.BlobProxy@11e84b60”。
  • “像“org.hibernate.engine.jdbc.BlobProxy@11e84b60”这样的保存是什么意思?您无法从数据库中取回实体吗?
  • 是的,在阅读或选择查询时,我得到“org.hibernate.engine.jdbc.BlobProxy@11e84b60”。在保存 String 时,我希望保留与 String 而不是 Object 相同的内容。
  • 尝试将长度添加到 Column 注释 Column(length="1000")。如何从数据库中检索实体?

标签: java mysql hibernate exception text


【解决方案1】:

去掉@Lob和@Size注解,使用@Type(type="text") 而是

工作。谢谢@Maurice 和@Funtik

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多