Este es un diseño horrible y realmente no lo estoy recomendando (solo debes crear otra tabla) pero es posible.
En primer lugar, deberá usar un atributo byte[]
para contener una versión serializada de la lista de personas que se almacenarán en un BLOB en la base de datos. Así que anote su getter con @Lob
(Haría que getter y setter private
no los expongan). Luego, exponga getter y setter "falso" para devolver o establecer un List<Person>
del byte[]
. Estoy usando SerializationUtils
de Commons Lang en el ejemplo siguiente (proporcione su propia clase de ayuda si no desea importar esta biblioteca) para serializar/deserializar sobre la marcha a/desde el byte[]
. No olvide marcar el captador "falso" con @Transcient
o Hibernate intentará crear un campo (y fallar porque no podrá determinar el tipo para un List
).
@Entity(name = "family")
class Family implements Serializable {
// ...
private byte[] familyMembersAsByteArray;
public Family() {}
@Lob
@Column(name = "members", length = Integer.MAX_VALUE - 1)
private byte[] getFamilyMembersAsByteArray() { // not exposed
return familyMembersAsByteArray;
}
private void setFamilyMembersAsByteArray((byte[] familyMembersAsByteArray() { // not exposed
this.familyMembersAsByteArray = familyMembersAsByteArray;
}
@Transient
public List<Person> getFamilyMembers() {
return (List<Person>) SerializationUtils.deserialize(familyMembersAsByteArray);
}
public void setParticipants(List familyMembers) {
this.familyMembersAsByteArray = SerializationUtils.serialize((Serializable) familyMembers);
}
}
No se olvide de hacer que la clase Serializable
Person
y añadir un verdadero serialVersionUID
(sólo estoy mostrando un defecto aquí):
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
// ...
private String firstName, lastName;
private int age;
}
Pero, permítanme insistir, esta es una horrible diseño y será muy frágil (cambiar Person
podría requerir para "migrar" el contenido del BLOB para evitar problemas de deserialización y esto será doloroso. Realmente debería reconsiderar esta idea y usar otra tabla para el Person
en su lugar (o yo don no entiendo por qué usa una base de datos).
Esto no es clara. Si está viendo familly como un grupo de personas, entonces necesita una nueva tabla para familly, excepto si representa a la familia con un tipo simple como un entero o una cadena. – Kartoch
OT: Eso sería un mal diseño. –
Si una familia tiene 3 miembros, ¿qué valor esperaría ver en la columna de la base de datos? –