Tengo una clase asignada como una Entidad que persisten en una base de datos. Tengo un campo id como clave principal para que cada vez que el objeto se conserva el valor de la id se recupera a partir de la secuencia «myClass_pk_seq», un código como el siguiente.

@Entity
@Table(name="myObjects")
public class MyClass {
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequence")
    @SequenceGenerator(name="sequence", sequenceName="myClass_pk_seq", allocationSize=1)
    @Column(name="myClassId")
    private Integer id;

    private Integer code;


    ...
}

Tengo que hacer en el «código» atributo algo similar a id. Necesito una secuencia de lo que puedo asignar el código de la siguiente valor de la secuencia (a reserva de que el valor en caso de que el usuario desea reservar, pero sin la persistencia de datos). Me refiero a que el usuario va a ver el campo, si él no sabe lo que para entrar en él puede pulsar un botón y receieve en la pantalla el siguiente valor posible (y puede o no aceptar). ¿Cómo puedo obtener el siguiente valor de una secuencia definida en JPA (y de incremento de su valor), sin almacenar los datos para un no campo de clave principal?

Solo quiero tener un método que se llame nextval en una secuencia asociado con el «código», y devuelve el valor. ¿Cuál es la mejor manera de hacerlo en JPA con anotaciones?

Gracias.

¿por qué necesita «reserva» de ella. ¿Por qué no dejar JPA manejar que
ok, he de cambiar por completo mi pregunta, así que ahora tiene más sentido.
véase también stackoverflow.com/questions/277630/…

OriginalEl autor Javi | 2010-06-18

2 Comentarios

  1. 3

    Solo quiero tener un método que se llame nextval en una secuencia asociado con el «código», y devuelve el valor. ¿Cuál es la mejor manera de hacerlo en JPA con anotaciones?

    • Nativo de SQL para obtener el siguiente valor de secuencia cuando el usuario presiona el botón. Crear la secuencia de forma manual o utilizar un «falso entidad» para tener JPA crear para usted.
    • Si usted no desea utilizar SQL nativo, inserte una entidad depender de la secuencia y obtiene su id.

    Ambas soluciones suena un poco feo. Tal vez usted podría simplemente utilizar un generador de números aleatorios como un UUID del generador.

    De hecho, usted no menciona nada acerca de la singularidad de la code (y la de JPA no mostrar debe ser único). ¿Por qué no volver al azar int?

    Número de código debe ser único, pero no siempre. Cuando el botón se presiona con un nuevo y único valor debe ser dada a pesar de que el usuario puede cambiar e insertar otro valor (que puede ser incluso uno ya almacenado en la base de datos). Es como darle la oportunidad de que el usuario vea el siguiente valor posible y puede o no aceptarlo (pero sin guardar nada en la base de datos)
    Entonces, ¿por qué no usar un generador de números aleatorios?
    tal vez podría hacer el truco,o simplemente incluso estático de un largo atributo y lo incrementa en uno.
    lastima que JPA no apoyar a una primitiva de base de datos estándar construir secuencias. Gracias por aclarar esto!

    OriginalEl autor Pascal Thivent

  2. 0

    A ver otra pregunta/respuestas sobre el tema de la utilización de la secuencia definida en otro lugar de los campos de id de. Usted puede crear una falsa entidad con un campo de tipo Long id). Conectarlo a la secuencia definida en la base de datos. A continuación, cree un CrudRepository aplicación para esa entidad y llamar a su método save() con un vacío instancia de la falsa entidad objeto definido. Hibernate para ejecutar un «seleccione YOUR_SEQ.NEXTVAL de doble» de la consulta.

    OriginalEl autor razvanone

Dejar respuesta

Please enter your comment!
Please enter your name here