2012-10-15 2 views
3

제발 도와주세요 .- 제 신청서가 오늘까지 제대로 작동했습니다. 오늘 저는 예외를 "비 직렬화 할 수 없습니다". java.io.eofException. 그리고 때로는 데이터를 얻을 수있었습니다. 문제는 간헐적이었습니다. 여기서 문제가 될 수있는 것은 무엇입니까? 객체가 캐시 할 수 있기 때문에org.hibernate.type.SerializationException을 비 직렬화 할 수 없습니다.

@Entity 
@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) 
public class Filter { 
private int id; 
    private String name; 
    private User user; 
    private NameValue[][] filterMap; 


    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE) 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    @ManyToOne(
      targetEntity = User.class 
    ) 
    @JoinColumn(name="userName") 
    public User getUser() { 
     return user; 
    } 
    public void setUser(User user) { 
     this.user = user; 
    } 
    @Lob 
     public NameValue[][] getFilterMap() { 
     return filterMap; 
    } 
    public void setFilterMap(NameValue[][] filterMap) { 
     this.filterMap = filterMap; 
    } 
+0

자세한 내용을 제공 할 수 있습니까? 아마도 스택 추적 – Anshu

답변

4

이것은 아마 발생, 당신은 디스크 (또는 다른 저장 장치)에 오버플로 캐시를 구성해야합니다.

당신이 클래스를 직렬화 또는 역 직렬화 할 때 문제가 발생하고 다음 중 하나 이상이 발생할 :

  1. 클래스 또는 (예 : 사용자로) 모든 필드는 직렬화 구현하지
  2. 클래스는 마지막 배포 이후 변경되었으며 java는 새 serialVersionUID를 생성합니다. java가 이전에 디스크 캐시에 있던 객체를로드하려고 시도하면 serialVersionUID가 일치하지 않아 오류가 발생합니다.
  3. 당신은 당신은 하이버 네이트 엔티티 Serializable 인터페이스를 구현하고 기본 private static final long serialVersionUID = 1L을 유지해야 다른 serialVersionUID
+0

안녕하세요, Augusto! 답장을 보내 주셔서 감사합니다. 사실 하 -jdbc도 사용하고 있습니다. 그리고 우리는 < org.hibernate.cache.infinispan.InfinispanRegionFactory <속성 이름 = "hibernate.cache.region.factory_class"> 사실 우리의 L2 캐시가 생산 <속성 이름 = "cache.use_second_level_cache">에서 활성화 property name = "cache.use_query_cache"> false 캐시 사용법을 완전히 이해하지 못했습니다. 하지만 어쩌면 내가 그것을 비활성화하려고합니다. – Jess

+0

안녕하세요 제스, 하이버 데이트 클래스'Serializable' 만들기, 그 문제를 해결할 수도 있습니다. – Augusto

1

를 생성하는 다른 JVM을 사용하고 있습니다. 그 가치는 1L 일 필요는 없지만 무엇이든 될 수 있습니다.

예 :

public class Med implements Serializable { 
    private static final long serialVersionUID = 1L; 
} 
0

내가 시간을 검색하는 동안이 오류 발생 해결책은 간단하게 제거가 그래서는 DB 측 수동으로 최대 절전 모드 삽입 된 행의 휴식 후 일부 행을 삽입 해결 것 직면하고 나를 위해 솔루션, 을 가지고이 문제 db 데이터 전체 또는 수동으로 입력 한 행을 다음 최대 절전 모드를 통해 삽입 한 후 데이터 (조건)이 시간도 예외를 검색합니다. - Mallikarjun Chinta

관련 문제