well, I kept searching around and found the following solution
models.Producto
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(discriminatorType=DiscriminatorType.STRING,
name="tipoDiscriminator")
public abstract class Producto extends Model {
public String codigo;
@ManyToOne
public TipoProducto tipoProducto;
public Integer stock;
public Integer stockMinimo;
public Integer stockMaximo;
@PrePersist
public void initTipoProducto() { //force child clasess to implement
this method
Class<? extends Producto> clazz = this.getClass();
DiscriminatorValue discriminatorAnnotation =
(DiscriminatorValue) clazz.getAnnotation(DiscriminatorValue.class);
if (discriminatorAnnotation==null)
throw new RuntimeException("No @DiscriminatorValue annotation
defined in class '" + clazz.getName() + "'.");
String discriminatorValue = discriminatorAnnotation.value();
if ("".equals(discriminatorValue.trim()))
throw new RuntimeException("@DiscriminatorValue annotation cannot
be empty in class '" + clazz.getName() + "'.");
setTipoProductoByCodigo(discriminatorValue);
}
public void setTipoProductoByCodigo(String codigo) {
TipoProducto tp = TipoProducto.find("codigo", codigo).first();
if (tp==null) throw new RuntimeException("No TipoProducto found with
code '" + codigo + "'.");
this.tipoProducto = tp;
}
}
--
and child entities are just
models.Remera
@Entity
@DiscriminatorValue("remera")
public class Remera extends Producto {
public String color;
public String talle;
}
saludos
sas