2011-04-09 30 views
10

campo de cadena sencilla,JPA: ¿Qué debería usar? Básico (opcional) o Columna (nulable)? Para

@Entity 
class Foo { 

    //1. @Basic(optional = false) 
    //2. @Column(length = 100, nullable = false) 
    String name; 
} 

necesito para restringir la longitud del nombre mediante @Column anotación, pero estoy confundido con el atributo anulable. Mientras estoy usando otras anotaciones como @ManyToOne y @OneToMany que usan los atributos optional, me apetece usar @Basic(optional) para mantener la mayoría de las anotaciones uniformes. Pero no puedo restringir la longitud del nombre con @Basic.

Entonces, ¿dónde debo anotar el atributo que admite nulos, por @Basic o @Column?

EDITAR

simplemente decir, en qué forma prefieres:

Formulario 1:

@Entity 
class Foo { 
    @Basic(optional = false) 
    @Column(length = 100) 
    String name; 
} 

Forma 2:

@Entity 
class Foo { 
    @Column(length = 100, nullable = false) 
    String name; 
} 

Bueno, personalmente me gusta Formulario 1, porque optional atributo también se usa en las anotacionesetc., pero el Formulario 2 también es bueno porque está hecho en una sola anotación.

EDITAR

Después de leer http://markmail.org/message/osod6rsauwbnkvya, tengo la diferencia entre @Basic.optional y @Column.nullable. Pero todavía no sé cuál debería usar. Parece bueno incluir ambas anotaciones, por lo tanto, asegúrese de que la tabla subyacente esté bien definida y marque nulo en JPA antes de que la actualización real sea ligeramente más rápida.

+1

posible duplicado de [@Basic (opcional = falso) vs @Column (nullable = falso) en JPA] (http://stackoverflow.com/questions/2899073/basicoptional-false-vs-columnnullable-false-in- jpa) – rds

Respuesta

9

Desde documentación de la API:

@Basic:

anotación @Basic es el tipo más simple de la cartografía a una columna de base de datos. El anotación básica se puede aplicar a una propiedad persistente o instancia variables de cualquiera de los siguientes tipos : tipos primitivos de Java, envolturas de los tipos primitivos, Cordel, java.math.BigInteger, java.math.BigDecimal , java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp, byte [], Byte [], char [], Character [], enumeraciones, y cualquier otro tipo que implemente Serializable.

@Column

@Column se utiliza para especificar una columna asignada una propiedad persistente o campo. Si no se especifica una anotación de columna , se aplican los valores predeterminados .

Por lo tanto, si no especifica @Column obtiene el valor de columna de getter/setter. Si necesita especificar el nombre del columna, debe anotar @Column.

@Basic le permite especificar el Tipo de extracción. Si desea cambiar el tipo de búsqueda por defecto, debe usar esta anotación; de lo contrario, puede omitirla.

+3

Ver http://stackoverflow.com/questions/2899073/basicoptional-false-vs-columnnullable-false-in-jpa – Reddy

+0

@Reddy - Entonces, solo '@ Basic' es como decir que la columna de la base de datos' NO NULL' para dicha variable? Entonces, ¿por qué hay dos formas de hacer lo mismo? –

Cuestiones relacionadas