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;
}
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.
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:
- cuando se utiliza una clave compuesta
- cuando se utiliza una clave primaria compartida
- al usar teclas primarias en cascada
Esto no es una cosa semántica, sino definitivamente técnica.
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.
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
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