2012-09-29 21 views
1

我想在Play Framework(2.03)中使用Ebeans來保留複雜的對象。特別是,我創建了一個類,其中包含weka.classifier.Classifier類型的域(Weka是一個流行的機器學習庫 - 請參閱http://weka.sourceforge.net/doc/weka/classifiers/Classifier.html)。分類實現了可序列化,所以我希望我可以用的東西擺脫像如何在Play框架中保留非平凡的字段

@Entity 
@Table(name = "classifiers") 
public class ClassifierData extends Model { 
    @Id 
    public Long id; 
    public Classifier classifier; 
} 

然而,演變劇本提出以下數據庫結構:

create table classifiers (
    id bigint auto_increment not null, 
    constraint pk_classifiers primary key (id)) 
) 

換句話說,它忽略類型分類領域。

(數據庫MySQL的是,如果這有什麼差別)

我應該怎麼做來存儲使用Ebean /演變/ PlayFramework複雜的可序列化對象?

回答

0

我假設您使用JPA進行數據庫訪問。你可以存儲,看到Java EE5 Tutorial

  • 用戶自定義序列化類型
  • 的byte []
  • 字節]

看來,分類型不保存到數據庫中,即使分級類實現java.io.Serializable接口。我認爲你應該使用字節[]保存模型和字符串分類器類型。您可以使用以下方法來查看weka如何寫入和讀取模型。

  • weka.core.SerializationHelper.write
  • weka.core.SerializationHelper.read

商店序列化的對象本身在數據庫中作爲字節[]。

@Entity 
@Table(name = "classifiers") 
public class ClassifierData extends Model { 
    @Id 
    public Long id; 
    public byte[] classifierSavedModel; 
    public String classifierType 
} 
+0

謝謝你,阿蒂拉。我希望我可以通過兼容Evolution(根據Java bean結構中的變化重新生成數據庫結構)來實現它。使用自定義序列化將意味着我必須將其關閉以防止覆蓋更改。 – AlexR