我想使用Ebean ORM序列化我的MySQL數據庫上的Java類。具有自定義對象屬性的Serialize java類
我的類定義是類似以下內容:
public class Test implements Serializable
{
@Id
private Long id;
...
...
...
@Lob
private MyClass1 obj1;
@Lob
private MyClass2 obj2;
...
...
//getters and setters
}
在我的類MyClass1的和MyClass2基本上都是針對一個
float[]
包裝和
Hashmap<String, Float>
,並都實現可序列化的接口。
我不希望有創建一個類:
@Lob
byte[] obj1bytes;
@Transient
MyClass1 obj1Obj;
@Lob
byte[] obj2bytes;
@Transient
MyClass2 obj2Obj;
//getters and setters
我想什麼來獲得的序列化和反序列化自動這個類,而不必使用字節[]數組來保存OBJ1和OBJ2使用
Ebean.save(testClassInstance);
Ebean.find(Test.class, ID);
EDIT1我的測試類到MySQL表有兩種LONGBLOB字段:MyClass1的定義如下:
public class MyClass1 implements Interface1 {
private float[] vector;
public MyClass1() {
}
public MyClass1 (float[] vector) {
this.vector = vector;
}
public float[] getVector() {
return vector;
}
public void setVector(float[] vector) {
this.vector = vector;
}
@Override
public byte[] serialize() throws Exception {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(object);
out.close();
return byteOut.toByteArray();
}
@Override
public void deserialize(byte[] bytes) throws Exception {
ByteArrayInputStream byteInt = new ByteArrayInputStream(bytes);
ObjectInputStream out = new ObjectInputStream(byteInt);
vector = (float[])out.readObject();
}
@Override
public float cossim(MyClass1 v) throws Exception {
method logic
}
@Override
public MyClass1 add(MyClass1 v) throws Exception {
method logic
}
}
MyClass2被定義爲MyClass1,而不是float [] vector我有一個HashMap < String,Float>()。值得一提的唯一的區別是序列化()和反序列化():
@Override
public byte[] serialize() throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(outStream);
out.writeInt(map.size());
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
out.writeUTF(key);
out.writeFloat(map.get(key));
}
return outStream.toByteArray();
}
@Override
public void deserialize(byte[] bytes) throws Exception {
try {
ByteArrayInputStream inStream = new ByteArrayInputStream(bytes);
DataInputStream in = new DataInputStream(inStream);
this.map = new HashMap<>();
int n = in.readInt();
for (int i = 0; i < n; i++) {
map.put(in.readUTF(), in.readFloat());
}
} catch (Exception ex) {
throw ex;
}
}
謝謝您的回覆。實際上我已經讀過wikiboook,完全一樣:我使用@Lob註釋了MyClass1和MyClass2對象,但是當我執行Ebean.save(testInstance)時,除了這兩個字段之外,每個字段都保存在數據庫中。我需要包裝那些float []和HashMap,因爲它們需要對它們做一些特定的操作,需要創建兩個類。 –
Andrea
@Andrea你可以發佈你的MyClass1和MyClass2嗎? – Ramsharan
我修改了我的問題以包含MyClass1和MyClass2定義(其中大部分實際上是) – Andrea