tutorial proveedores patron libro avanzado anotaciones java hibernate jpa openjpa

java - proveedores - JPA: asignación de nombre de columna predeterminada para las relaciones @ManyToOne



patron jpa (2)

Puede que no entienda tu pregunta. Sin embargo, ¿no necesitas algo como abajo?

@ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="order_id", nullable=false) Order order;

Aquí hay unos ejemplos

Cuando tenemos una clase:

@Entity Order implements Serializable { @Id private Integer id; ... }

y:

@Entity OrderLine implements Serializable { @Id private Integer id; @ManyToOne Order order; ... }

¿A qué nombre de fila se asignará el orden de propiedad?

order_id, ORDER_ID or Order_id?

(omitir @JoinColumn (name = ''order_id'') es deliberado)


JoinColumn es lo que escribe la especificación JPA 1.0 sobre la anotación JoinColumn :

9.1.6 Anotación JoinColumn

...

El elemento de anotación de name define el nombre de la columna de clave externa. Los elementos de anotación restantes (distintos a los referencedColumnName ) se refieren a esta columna y tienen la misma semántica que para la anotación de columna.

Si hay una sola columna de unión, y si falta el miembro de la anotación del name , el nombre de la columna de unión se forma como la concatenación de lo siguiente: el nombre de la propiedad de relación de referencia o el campo de la entidad de referencia; "_"; El nombre de la columna de clave primaria referenciada. Si no existe tal propiedad o campo de relación de referencia en la entidad (es decir, se utiliza una tabla de unión), el nombre de la columna de unión se forma como la concatenación de lo siguiente: el nombre de la entidad; "_"; El nombre de la columna de clave primaria referenciada.

...

Entonces, en su ejemplo, el nombre predeterminado de la columna de clave externa sería order_id .

Referencias

  • Especificación JPA 1.0
    • Sección 9.1.6 "JoinColumn Annotation"