Hello everybody,
Here is my config: a value table which has multiple inheritance
Code:
@Entity
@Table(name="Value")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "valueType", discriminatorType = DiscriminatorType.STRING)
public abstract class Value implements Serializable
{
private static final long serialVersionUID = 7301755822929337372L;
private long id;
@Id
@GeneratedValue
public long getId()
{
return id;
}
public void setId(long id)
{
this.id = id;
}
}
parentId can be Characteristic or other class, so in CharacteristicMinValue and CharacteristicMaxValue, I configure the manyToOne association.
Code:
@Entity(name = "CharacteristicMinValue")
@DiscriminatorValue("CharacteristicMinValue")
public class CharacteristicMinValue extends CharacteristicValue implements Serializable
{
private static final long serialVersionUID = 3167123861324562680L;
@ManyToOne
@JoinColumn(name = "parentId")
public Characteristic getCharacteristic()
{
return characteristic;
}
public void setCharacteristic(Characteristic characteristic)
{
this.characteristic = characteristic;
}
}
Code:
@Entity(name = "CharacteristicMaxValue")
@DiscriminatorValue("CharacteristicMaxValue")
public class CharacteristicMaxValue extends CharacteristicValue implements Serializable
{
private static final long serialVersionUID = 3167123861324562680L;
@ManyToOne
@JoinColumn(name = "parentId")
public Characteristic getCharacteristic()
{
return characteristic;
}
public void setCharacteristic(Characteristic characteristic)
{
this.characteristic = characteristic;
}
}
Here is a class which have CharacteristicMaxValue:
Code:
@Entity
public class Characteristic extends CommonTable implements Serializable
{
private static final long serialVersionUID = -4546790016363592545L;
private List<CharacteristicMaxValue> maxValue;
@OneToMany(mappedBy = "characteristic", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@OrderBy("priority ASC")
public List<CharacteristicMaxValue> getMaxValue()
{
return maxValue;
}
public void setMaxValue(List<CharacteristicMaxValue> maxValue)
{
this.maxValue = maxValue;
}
}
the problem is:
when I load a characteristic object, all values for this object are loaded in MaxValues,
the sql query does not take care of the discriminatorValue. What's the problem ?
(in my column valueType, the discriminator is well created when I add a CharacteristicMaxValue, but if I add to this Characteristic objects of type CharacteristicMinValue, there are added in maxValue...)
thanks