Snazim se vytvorit hierarchii objektu kde v jedne tabulce jsou data pro
vice objektu a objekty se lisi discriminatorem.
Pr.:
@Entity
@Table(name="user_skupinaKlic")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type",
discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue("")
public class SkupinaKlicImpl implements SkupinaKlic, Serializable {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@ManyToOne(targetEntity=UserImpl.class)
@PrimaryKeyJoinColumn
private User user;
@Column
private Integer value;
Set, get metody a metoda equals (pouziva instanceOf) a hash
}
Z ni dedi dve tridy
@Entity(name="Skupina")
@DiscriminatorValue("0")
public class SkupinaSkupinaKlic extends SkupinaKlicImpl {}
a
@Entity(name="Klic")
@DiscriminatorValue("1")
public class KlicSkupinaKlic extends SkupinaKlicImpl {}
1) Pri tomto mapovani se vyskytlo hned nekolik potizi. Prvni je v
pripade, kdyz DiscriminatorColumn nastavym na typ INTEGER, prohlasi
hibernate ze neprevede hodnotu. Zmenil jsem tedy sloupecek v db na
varchar a nastavil kolonku jako STRING. Kazdopadne bych ale radsi mel
discriminator typu integer.
2) Pri pokusu o nacteni nektere z podtrid skonci hibernate s vyjimkou:
org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException:
Object with id: 4 was not of the specified subclass:
cz.apnetis.pohoda.settings.SkupinaSkupinaKlic (loaded object was of
wrong class); nested exception is org.hibernate.WrongClassException:
Object with id: 4 was not of the specified subclass:
cz.apnetis.pohoda.settings.SkupinaSkupinaKlic (loaded object was of
wrong class)
org.hibernate.WrongClassException: Object with id: 4 was not of the
specified subclass: cz.apnetis.pohoda.settings.SkupinaSkupinaKlic
(loaded object was of wrong class)
at org.hibernate.loader.Loader.instanceAlreadyLoaded(Loader.java:1235)
Zaznam s id 4 je prvnim zaznamem v tabulce a schodou okolnosti ma type
nastavene na 0, tudiz by mel byt typu SkupinaSkupinaKlic (ale je to
celkem jedno i kdyz ho zmenim na 1, tak na nem hibernate skonci).
Zkousel jsem z equals vyhodit instanceOf a nepomohlo to
Objekty jsou nacitany jako lazy=false
Uz mam touhle chybou zkazenou celou sobotu a porad jsem se nehnul z mista.