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.

Reply via email to