相关疑难解决方法(0)

JPA实体何时以及为何应该实现Serializable接口?

问题出在标题中.下面我刚才描述了我的一些想法和发现.

当我有非常简单的域模型(没有任何关系的3个表)时,我的所有实体都没有实现Serializable.

但是当域模型变得更复杂时,我得到了RuntimeException,它说我的一个实体没有实现Serializable.

我使用Hibernate作为JPA实现.

我想知道:

  1. 是特定于供应商的要求/行为吗?
  2. 我的可序列化实体会发生什么?它们是否可以序列化以便存储或传输?
  3. 在哪一刻,有必要使我的实体可序列化?

java orm serialization hibernate jpa

128
推荐指数
10
解决办法
7万
查看次数

为什么composite-id类必须实现Serializable?

如果我创建一个复合id类,它不实现Serializable,如:

@Entity
@Table(name = "board")
public class Board {
    @Id
    @Column(name = "keyword_news_id")
    private int id;

    @Id
    @Column(name = "board_no")
    private int boardNo;
....
Run Code Online (Sandbox Code Playgroud)

错误发生如下:

Caused by: org.hibernate.MappingException: composite-id class must implement Serializable: com.estinternet.news.domain.IssueNewsBoard
    at org.hibernate.mapping.RootClass.checkCompositeIdentifier(RootClass.java:263)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:244)
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1362)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
Run Code Online (Sandbox Code Playgroud)

Hibernate实体类不需要是Serializable.那么,为什么composite-id类必须实现Serializable?我读了这个帖子,但它没有给我足够的信息.

java hibernate

46
推荐指数
1
解决办法
5万
查看次数

无法强制转换为java.io.Serializable

我目前正在使用条件来检索用户的详细信息,但在尝试使用正确的用户查询详细信息对象时,我得到了ClassCastException.

我的标准代码;

Criteria criteria = sess.createCriteria(UserDetails.class)
criteria.add(Restrictions.eq("user.id", user.id));
Run Code Online (Sandbox Code Playgroud)

我也试过用;

Criteria criteria = sess.createCriteria(UserDetails.class)

Criteria subCriteria = criteria.createCriteria("user");
subCriteria.add(Restrictions.eq("id", user.id));
Run Code Online (Sandbox Code Playgroud)

两者都给我ClassCastException.我知道我可以通过让用户实现Serializable来轻松解决它,但还有其他解决方案吗?

java hibernate criteria

17
推荐指数
4
解决办法
3万
查看次数

什么是Serializable?这是什么意思?

可能的重复:
Hibernate表类需要是Serializable吗?
Serializable是什么意思?

public class ExampleEntity implements Serializable
{
     @Id
     private long id;
     private int fieldInt;
     private long fieldLong;
     private String fieldString;
 }
Run Code Online (Sandbox Code Playgroud)

我正在寻找JPA教程.我能够理解基本概念,但在他们添加的所有教程中,这可序列化.这样做的目的是什么?这对我有什么帮助?有什么建议吗?

java serialization

12
推荐指数
1
解决办法
2万
查看次数

我是否应该使用 DTO?

我正在使用 Spring 构建一个 Web 应用程序,现在我有一个实体、一个存储库、一个 RestController,并且我可以在浏览器中访问端点。

我现在正在尝试将 JSON 数据返回到浏览器,并且我在各种指南中看到了有关 DTO 的所有内容。

我真的需要 DTO 吗?我不能将序列化逻辑放在实体本身上吗?

spring

6
推荐指数
2
解决办法
5938
查看次数

"使用JPA EmbeddedId和Hibernate,不知道是否传递了类名...是安全的"

在教程中提供的示例代码的非常精简版本中,嵌入式复合主键:主键«JPA«Java教程,我得到:

javax.persistence.PersistenceException: [PersistenceUnit: unit] Unable to build Hibernate SessionFactory
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:877)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:805)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at [my code that calls e.persist on a Student]
Run Code Online (Sandbox Code Playgroud)

异常是相当通用的,但Hibernate提供了一些很好的日志调试信息(我用<package>替换了实际的包名):

[DEBUG] org.hibernate.boot.internal.ClassLoaderAccessImpl: Not known whether passed class name [<package>.Student] is safe
[DEBUG] org.hibernate.boot.internal.ClassLoaderAccessImpl: No temp ClassLoader provided; using live ClassLoader for loading potentially unsafe class : <package>.Student
Run Code Online (Sandbox Code Playgroud)

这是蒸馏代码.(背景故事是我一直试图创建一个具有嵌入式id的实体无效.经过一段时间尝试调试之后,我重新开始使用这个教程代码,删除内容直到我得到相同的错误.)

@Embeddable
class StudentId {
    private int id; 

    public StudentId() {}

    public StudentId(int id) { this.id = id; }

    @Override
    public boolean …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa jpa-2.0

5
推荐指数
1
解决办法
1616
查看次数

使用 JPA 和 Rest API 进行 Java 序列化

正如我们在 java 中所知,这里使用Serialization引用博客

将对象的状态转换为字节流,该字节流可以持久保存到磁盘/文件中或通过网络发送到任何其他正在运行的 Java 虚拟机。

  • REST API 案例:

现在考虑第二种情况,通过网络发送到另一个正在运行的 jvm ,如果我们考虑Rest API的示例,即“主机:端口/路径/资源”。

通常我使用 Spring@RequestMapping将资源模型 pojo 类返回为ResponseEntity. 我没有在Serializable模型类中实现接口,一切正常,我得到了 json 中的 API 响应。

ModelX.java

public class ModelX {

    private int x = 2 ;
    private String xs = "stringx";

    // getters and setters

}
Run Code Online (Sandbox Code Playgroud)

控制器方法

@RequestMapping(value = "/test",method=RequestMethod.POST)
public ResponseEntity<ModelX> getTestModel(@RequestBody ModelX mox){

    ModelX mx = new ModelX();
    mx.setX(mox.getX());
    mx.setXs(mox.getXs());

    return new ResponseEntity<ModelX>(mx, HttpStatus.OK) ; …
Run Code Online (Sandbox Code Playgroud)

java serialization jpa

5
推荐指数
1
解决办法
2536
查看次数

我们应该在hibernate中创建Domain Class时实现Serializable接口

我是hibernate的新手.我尝试了一些使用hibernate API的基本CRUD操作.

我创建了一个Person类

@Entity
class Person
{
   String name
}
Run Code Online (Sandbox Code Playgroud)

我能够在数据库中保存这个类.直到现在我才认为JPA内部使这个类实现Serializable,因为只有序列化才能保存对象的状态.但是我试过这个:

Person p=new Person();
boolean bool=p instanceof Serializable;    
sop(bool);   //false
Run Code Online (Sandbox Code Playgroud)

然后我创建了另一个类Human(在Hibernate doc上找到了这种实现方式)

@Entity
class Human implements Serializable
{
    String name    
}

Human h=new Human();
boolean bool=h instanceof Serializable    
sop(bool);  //true
Run Code Online (Sandbox Code Playgroud)

我们应该以哪种方式创建我们的域类以及hibernate如何在内部处理这两种方式?

请帮忙.

java spring hibernate jpa

2
推荐指数
1
解决办法
3449
查看次数

标签 统计

java ×7

hibernate ×5

jpa ×4

serialization ×3

spring ×2

criteria ×1

jpa-2.0 ×1

orm ×1