Ahojte,

mam otazku ohladom pouzivania interface a mapovanie collections , konkretne Map.

poprosim niekoho kto pouziva mapovanie interfacov , je toto dobre pouzite. ak ano preco mam chybu

nested exception is org.hibernate.MappingException: property mapping has wrong number of columns: com.xxxx.model.HousePropertyValue.value type: object

stale mam pocit ze je zle napisany interface.

mam triedu House.java, kde je definovana Map:

@OneToMany(mappedBy = "house", fetch = FetchType.LAZY, cascade = CascadeType.ALL,
               targetEntity = com.xxx.model.HousePropertyValue.class)
   @MapKey(name = "valueKey")
   private Map<String, HousePropertyValue> housePropertyValues;

kde HousePropertyValue je interface:

@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 interface HousePropertyValue extends Serializable {
   @Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seq_house_property_value")
   public Long getId();
   public void setId(Long id);
   @Column(name="value_key", nullable = false)
   public String getValueKey();
   public void setValueKey(String valueKey);
   @ManyToOne (fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "fk_house_id", referencedColumnName = "id", nullable = false)
   public House getHouse();
   public void setHouse(House house);
   public Object getValue();
   public void setValue(Object value);
}



a potom triedu HousePropertyDateValue.java, ktora implementuje dane rozhranie:

@Entity
@DiscriminatorValue("DATE")
@javax.persistence.SequenceGenerator(
   name="seq_house_property_value",
   sequenceName="s_house_property_value",
   allocationSize=1
)
public class HousePropertyDateValue implements HousePropertyValue {

   @Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seq_house_property_value")
   private Long id;

   private House house;

   private String valueKey;

   @Column(name="value_date", nullable=false)
   private Date value = new Date();

   public HousePropertyDateValue() {}
public HousePropertyDateValue(Date value) { this.value = value; }
   public Long getId() {       return id;    }
   public void setId(Long id) {         this.id = id;    }
   public String getValueKey() {         return valueKey;    }
public void setValueKey(String valueKey) { this.valueKey = valueKey; }
   public House getHouse() {        return house;    }
   public void setHouse(House house) {        this.house = house;    }
   public Date getValue()    {        return value;    }
   public void setValue( Date value )    {        this.value = value;    }
public void setValue( Object value ) { this.value = (Date) value; }
}

dakujem

Ivan

Odpovedet emailem