Hier ist die Struktur meiner Entitäten:
Abstract Item-Klasse
Code: Select all
@MappedSuperclass
public abstract class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "common_attribute", nullable = true)
private String commonAttribute;
}
Code: Select all
@Entity
@Table(name = "device_item")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeviceItem extends Item {
@Column(name = "serial_number", length = 255, nullable = false)
private String serialNumber;
}
Code: Select all
@Entity
@Table(name = "collet_item")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ColletItem extends Item {
@Column(name = "item_identifier", length = 255, nullable = false)
private String itemIdentifier;
}
Code: Select all
ClampingDeviceItem
Code: Select all
package ch.rfag.Model;
import jakarta.persistence.*;
import lombok.*;
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "clamping_device_item")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ClampingDeviceItem extends Item {
@Column(name = "item_identifier", length = 255, nullable = false, unique = true)
private String itemIdentifier;
}
Code: Select all
ItemCombination
Code: Select all
@Entity
@Table(name = "item_combination")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ItemCombination {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "collet_item_id_fk", nullable = true)
private ColletItem colletItem;
@ManyToOne
@JoinColumn(name = "holder_item_id_fk", nullable = true)
private HolderItem holderItem;
@ManyToOne
@JoinColumn(name = "clamping_item_id_fk", nullable = true)
private ClampingDeviceItem clampingDeviceItem;
}
Code: Select all
Caused by: java.lang.IllegalArgumentException: Cannot set ch.rfag.Model.ClampingDeviceItem field ch.rfag.Model.ItemCombination.clampingDeviceItem to ch.rfag.Model.DeviceItem
Meine Ziele:
Element behalten< /code> abstract, da ich vorhabe, in Zukunft weitere Unterklassen hinzuzufügen und eine Tabelle-pro-Klasse-Strategie zu verwenden, um eine saubere Trennung für jeden Elementtyp aufrechtzuerhalten und keine Nullwerte zu haben.
Wie kann ich Hibernate für die Verwendung von a konfigurieren? Tabelle-pro-Klasse-Strategie für diese Vererbungsstruktur?
PS: Mir ist bewusst, dass ich den Typ in der ItemCombination einfach Item haben könnte, aber Dadurch wäre es nicht möglich, die Artikelkennung vom jeweiligen Kind abzurufen. Selbst mit der Instanz von würde es mit keinem übereinstimmen.