not - transient spring java




¿Por qué JPA tiene una anotación @Transient? (4)

Como han dicho otros, @Transient se utiliza para marcar campos que no deben persistir. Considere este breve ejemplo:

public enum Gender { MALE, FEMALE, UNKNOWN }

@Entity
public Person {
    private Gender g;
    private long id;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public long getId() { return id; }
    public void setId(long id) { this.id = id; }

    public Gender getGender() { return g; }    
    public void setGender(Gender g) { this.g = g; }

    @Transient
    public boolean isMale() {
        return Gender.MALE.equals(g);
    }

    @Transient
    public boolean isFemale() {
        return Gender.FEMALE.equals(g);
    }
}

Cuando esta clase se alimenta a la JPA, persiste el gender y la id pero no intenta @Transient los métodos booleanos auxiliares; sin @Transient el sistema subyacente se quejaría de que faltan los setMale() y setFemale() la entidad Entity. y así no persistiría Person en absoluto.

Java tiene la palabra clave transient . ¿Por qué JPA tiene @Transient lugar de simplemente usar la palabra clave java ya existente?


Intentaré responder a la pregunta de "por qué". Imagine una situación en la que tenga una gran base de datos con muchas columnas en una tabla, y su proyecto / sistema use herramientas para generar entidades desde la base de datos. (Hibernate los tiene, etc.) Ahora, suponga que, según su lógica empresarial, necesita que un campo en particular NO sea persistente. Tienes que "configurar" tu entidad de una manera particular. Mientras que la palabra clave Transient funciona en un objeto, ya que se comporta dentro de un lenguaje java, @Transient solo está diseñado para responder a las tareas que pertenecen solo a las tareas de persistencia.


Porque tienen significados diferentes. La anotación @Transient le dice al proveedor de JPA que no persista ningún atributo (no transient ). El otro le dice al marco de serialización que no serialice un atributo. Es posible que desee tener una propiedad @Transient y seguir serializándola.


Si solo desea que un campo no se conserve , tanto el trabajo transitorio como el transitorio . Pero la pregunta es por qué @Transient ya que transitorio ya existe.

¡Porque el campo @Transient todavía se serializará!

Supongamos que creas una entidad, haciendo un cálculo que consume CPU para obtener un resultado y este resultado no se guardará en la base de datos. Pero desea enviar la entidad a otras aplicaciones Java para que las use JMS, entonces debería usar @Transient , no el transient palabra clave JavaSE. Por lo tanto, los receptores que se ejecutan en otras máquinas virtuales pueden ahorrar su tiempo para volver a calcularlos.





transient