ho essenzialmente le seguenti classi:Hibernate non inserendo DTYPE - valore è nullo
@Entity
@Table(name="user")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class User implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "email_address")
private String emailAddress;
/* getters and setters not shown */
}
e
@Entity
@Table(name="admin")
public class Admin extends User implements Serializable
{
private static final long serialVersionUID = 1L;
@Column(name = "role")
private String role;
/* getters and setters not shown */
}
mi aspetto Sospensione utilizzare per impostazione predefinita una colonna DTYPE varchar(31)
che esiste nella tabella user
. Quando il mio codice tenta di persistere un nuovo oggetto Admin compaiono i seguenti registrati per console:
Hibernate: insert into user (email_address) values (?)
Hibernate: insert into admin (role) values (?)
Quindi nessun tentativo è fatta da Hibernate per impostare la colonna user.DTYPE
, e rimane NULL nel database. Mi aspettavo che sarebbe stato impostato su Admin
.
Cosa sto sbagliando? Ho anche provato a impostare in modo esplicito @DiscriminatorColumn
sulla classe User e @DiscriminatorValue
sulla classe Admin
(e ho anche provato ad aggiungerlo a Utente) ma senza successo.
Pubblicare qui poiché non posso rispondere alla mia stessa domanda per 8 ore dopo la pubblicazione: Dopo aver pensato un po 'di più: credo che questo sia dovuto al fatto che 'User' è astratto. Poiché nessun oggetto User' può essere istanziato direttamente, non è necessario un discriminatore di tipo, poiché il tipo sarà conosciuto in anticipo. Qualcuno mi faccia sapere se mi sbaglio! – Alex