Por favor, explique acerca de: insertable = false, updatable = false


Si un campo está anotado insertable=false, updatable=false, ¿no significa que no puede insertar valor ni cambiar el valor existente? ¿Por qué querrías hacer eso?

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToMany(mappedBy="person", cascade=CascadeType.ALL)
    private List<Address> addresses;
}

@Entity
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    @JoinColumn(name="ADDRESS_FK")
    @Column(insertable=false, updatable=false)
    private Person person;
}
Author: Manuel Drieschmanns, 2010-09-27

4 answers

Lo haría cuando la responsabilidad de crear/actualizar la entidad relacionada en cuestión no esté en la entidad actual. Por ejemplo, tienes un Person y un Address. Le gustaría agregar insertable=false, updatable=false a la relación @OneToMany con la entidad Person en la entidad Address, simplemente porque no es responsabilidad de la entidad Address crear o actualizar un Person. Es al revés.

 87
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-24 10:52:06

Definir insertable=false, updatable=false es útil cuando necesita mapear un campo más de una vez en una entidad, normalmente:

Esto no es una cosa semántica, sino definitivamente técnica.

 73
Author: Pascal Thivent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-15 10:46:07

Me gustaría añadir a las respuestas de BalusC y Pascal Thivent otro uso común de insertable=false, updatable=false:

Considere una columna que no es un id sino una especie de número de secuencia . La responsabilidad del cálculo del número secuencial puede no corresponder necesariamente a la solicitud.

Por ejemplo, el número de secuencia comienza con 1000 y debe incrementarse en uno por cada nueva entidad. Esto se hace fácilmente, y muy apropiadamente, en la base de datos, y en tales casos estas configuraciones tienen sentido.

 17
Author: Magnilex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-23 09:03:13

Otro ejemplo sería en la columna" created_on " donde desea que la base de datos maneje la fecha de creación

 3
Author: Johny19,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-01 17:55:13