2012-02-14 46 views
36

如果我做一個複合-ID類沒有實現Serializable,如:爲什麼composite-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; 
.... 

錯誤發生,如:

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) 

Hibernate entity classes doesn't need to be Serializable。那麼,爲什麼composite-id類必須實現Serializable?我讀this thread,但它沒有給我足夠的信息。

+0

http://stackoverflow.com/questions/2301259/hibernate-composite-key – Perception 2012-02-14 05:24:49

+0

我讀了,但仍然無法理解的根本原因。 – 2012-02-14 06:39:47

+0

你的'@ IdClass'在哪裏? – 2016-09-07 08:03:01

回答

43

會話對象必須是序列化的,因此它引用的所有對象必須是可序列化也是如此。 該id用作索引會話中加載對象的鍵。在CompositeId的情況下,類本身被用作id。

+6

那麼爲什麼single-id類不需要被Serializable?你能詳細說明一下嗎? – 2012-02-14 12:11:16

+21

因爲ID是一個原始類型,是由默認可序列 – Firo 2012-02-14 13:18:53

+1

有趣的是,我沒有看到,複合ID類必須是可序列化的JPA任何要求。使用對象作爲鍵不需要序列化 ​​- 爲此對象必須正確實現hashcode()和equals()方法。序列化用於將對象以純文本形式存儲在數據庫或磁盤中。僅當完整對象應該作爲文本存儲在單個數據庫列中時才需要這樣做。但JPA並非如此 - 複合關鍵字的每個字段都映射到其各自的列中。 – OndrejM 2015-09-30 13:14:12

相關問題