Una vez que haya persistido el objeto, debería poder llamar a getId() o cualquiera que sea su columna @ID, para que pueda devolver eso desde su método. También podría invalidar la memoria caché de primer nivel de Hibernate y recuperarla nuevamente.
Sin embargo, para la portabilidad, es posible que desee ver el uso de Hibernate con la generación de ID de estilo de secuencia. Esto facilitará la transición de MySQL si alguna vez lo necesita. Ciertamente, si se utiliza este tipo de generador, usted será capaz de obtener el ID de inmediato, ya que Hibernate tiene que resolver el valor de la columna antes de que persiste el objeto:
@Id
@GeneratedValue (generator="MY_SEQ")
@GenericGenerator(name = "MY_SEQ",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "MY_SEQ"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "10") }
)
@Column (name = "id", nullable = false)
public Long getId() {
return this.id;
}
Es un poco más complejo, pero es el tipo de cosa que puedes cortar y pegar, aparte de cambiar el nombre de SEQUENCE.
¿Esto sucede incluso si transacción no se confirma y la sesión aún no está cerrado. – Ace