Zdravim konferenciu,
kedze nikto nezareagoval na moju minulu otazku (prikladam ju nizsie)
spytam sa takto. Ked mam namapovany MAP pomocou @MapKey:
@OneToMany(mappedBy = "house", fetch = FetchType.LAZY, cascade =
CascadeType.ALL, targetEntity = com.xxx.model.HousePropertyValue.class)
@MapKey(name = "valueKey")
private Map<String, HousePropertyValue> housePropertyValues = new
HashMap<String, HousePropertyValue>();
staci spravit:
house.getHousePropertyValues().put("popis1", new
HousePropertyIntegerValue(10));
alebo musim pre dany objekt este manualne nastavit property, ktora je
pouzivana na ulozenie kluca:
house.getHousePropertyValues().get("popis1").setValueKey("popis1");
pretoze mne funguje mapovanie iba vtedy ked tam mam aj toto "manualane"
nastavenie valueKey vlastnosti.
dakujem
Ivan
povodna otazka:
pouzivam Hibernate a mapovanie MAP pomocou anotacii.
v programe sa mi objavila zaujimava chyba. Po istom case sa mi prestal
ukladat kluc do stlpca v DB, aplikacia ziadnu vynimku nevypisuje, ale
kluc v DB nie je ulozeny.
subor House.java:
@OneToMany(mappedBy = "house", fetch = FetchType.LAZY, cascade =
CascadeType.ALL, targetEntity = com.xxx.model.HousePropertyValue.class)
@MapKey(name = "valueKey")
private Map<String, HousePropertyValue> housePropertyValues = new
HashMap<String, HousePropertyValue>();
//get a set pre housePropertyValues
a subor HousePropertyValue.java je abstraktna trieda, kde urcim ze kluc
sa ma ukladat do tabulky house_property_value stlpec value_key a to ze
aka treida bola pouzita je ulozene v stlpci value_type (discriminator):
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="value_type",
discriminatorType=DiscriminatorType.STRING
)
@Table(name="house_property_value")
@javax.persistence.SequenceGenerator(
name="seq_house_property_value",
sequenceName="s_house_property_value",
allocationSize=1
)
public abstract class HousePropertyValue implements Serializable {
@Column(name = "value_key")
private String valueKey;
@ManyToOne (fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "fk_house_id", referencedColumnName = "id")
private House house;
...
public String getValueKey() {
return valueKey;
}
public void setValueKey(String valueKey) {
this.valueKey = valueKey;
}
@Transient
public abstract Object getValue();
public abstract void setValue(Object value);
}
a jej implementacia HousePropertyIntegerValue (pouzivam aj
HousePropertyDateValue ):
@Entity
@DiscriminatorValue("INTEGER")
@javax.persistence.SequenceGenerator(
name="seq_house_property_value",
sequenceName="s_house_property_value",
allocationSize=1
)
public class HousePropertyIntegerValue extends HousePropertyValue {
@Column(name = "value_integer", nullable = false)
private Integer value;
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public void setValue(Object value) {
this.value = (Integer) value;
}
....
}
no a stlpec value_key v tabulke house_property_value je vzdy prazdny.
stlpec value_type v pripade pouzitia HousePropertyIntegerValue ma
hodnotu INTEGER, v pripade pouzitia HousePropertyDateValue ma hodnotu
DATE a aj vsetky ostatne stlpce su spravne zapisane.
napr. house.getHousePropertyValues().put("popis1", new
HousePropertyIntegerValue(10));
neviete kde moze byt problem?
velmi pekne dakujem
Ivan