Hallo,
ich hab ein Problem...
I bekomm diese fehlermeldung:
Code:
org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: myEntities.Product$ProductID, got class myEntities.Item$ItemID
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:86)
Die ProductID in der Tabelle Produkt ist ein zusammengesetzter Schlüssel. Die Tabelle Item hat auch einen zusammengesetzten Schlüssel und hat die selben Spalten als zusammengesetzten Schlüssel wie in Tabelle Produkt:
Code:
public class Product implements Serializable {
public static class ProductID implements Serializable
{
@Column(name = "ID_A", nullable = false, columnDefinition = "integer")
private Integer idA;
@Column(name = "ID_B", nullable = false, columnDefinition = "integer")
private Integer idB;
}
@EmbeddedId
private ProductID productID = new DocumentID();
getter/setter
@OneToOne(fetch = FetchType.EAGER, optional = true)
@JoinColumns({
@JoinColumn(name="ID_A", referencedColumnName="ID_A", nullable = false, insertable = false, updatable = false),
@JoinColumn(name="ID_B", referencedColumnName="ID_B", nullable = false, insertable = false, updatable = false) })
private Item item;
//getter/setter
}
Code:
public class Item implements Serializable {
public static class ItemID implements Serializable
{
@Column(name = "ID_A", nullable = false, columnDefinition = "integer")
private Integer idA;
@Column(name = "ID_B", nullable = false, columnDefinition = "integer")
private Integer idB;
}
@EmbeddedId
private ItemID itemID = new ItemID();
getter/setter
@OneToOne(fetch = FetchType.EAGER, optional = true, mappedBy="item")
private Product product;
//getter/setter
}
Diese HQL funzt und gibt mir alle Item-Instanzen eines Produkts zurück:
Code:
select a.item from Product a
Aber dieses HQL funzt NICHT:
Code:
select a from Product a
und gibt mir diese Fehlermeldung:
Code:
org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: myEntities.Product$ProductID, got class myEntities.Item$ItemID
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:86)
(Noch was anderes: Wenn ich die @OneToOne über den getter statt über dem Feld deklariere, ignoriert Hibernate mein OneToOne-Mapping und nimmt die Item-Instanz fälschlicherweise als Spalte wahr.)
Kennt sich da einer aus, wie man sowas am besten macht?
(Mit @PrimaryKeyJoinColumns kommt die selbe fehlermeldung, und SecondaryTable ist hier nicht sinnvoll).