estoy usando APP vínculo superior esencial y SQL Server 2008¿Por qué persiste JPA() no genera ID principal de incremento automático?
Mi objetivo es conseguir que el valor de clave principal incremento automático de los datos que se va a insertar en la tabla. Sé en JDBC, hay getInsertedId() como método que le da el id. De autoincremento de ID principal (pero eso es después de la instrucción de inserción ejecutada)
En JPA, descubrí que @GenratedValue annotation
puede hacer el truco.
@Entity
@Table(name = "tableOne")
public class TableOne implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "tableId")
private Integer tableId;
Ahora bien, si corro el código de abajo se debe dame el auto incrementado Identificación pero devuelve NULL ...
EntityManager em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();
EntityTransaction txn = em.getTransaction();
txn.begin();
TableOne parent = new TableOne();
em.persist(parent); //here I assume that id is pre-generated for me.
System.out.println(parent.getTableId()); //this returns NULL :(
Puedo obtener ID si confirmo: em.getTransaction(). Commit() pero no hay manera de obtener ID con persistencia ??? hmm –
Su código debería funcionar como esperaba. Lo probé y obtuve la identificación antes de comprometerme o si luego retrocedí. Es extraño que no. – Joel
¿Hay alguna diferencia si tableId es un int en lugar de un entero? – Joel