Пожалуйста, объясните о вставляемых = ложных и обновляемых = ложных в связи с аннотацией JPA @Column
Если поле аннотируется insertable=false, updatable=false
, означает ли это, что вы не можете вставить значение или изменить существующее значение? Почему вы хотите это сделать?
@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;
}
Ответы
Ответ 1
Вы сделали бы это, когда ответственность для создания/обновления соответствующего объекта, о котором идет речь, не находится в текущем объекте. Например. у вас есть Person
и Address
. Вы хотите добавить insertable=false, updatable=false
в отношение @OneToMany
к объекту Person
в объекте Address
, просто потому, что ответственность за создание или обновление Person
не несет ответственность за объект Address
. Это наоборот.
Ответ 2
Определение insertable=false, updatable=false
полезно, когда вам нужно отображать поле более одного раза в сущности, как правило:
Это ИМО не семантическая вещь, а определенно техническая.
Ответ 3
Я хотел бы добавить к ответам BalusC и Pascal Thivent еще одно общее использование insertable=false, updatable=false
:
Рассмотрим столбец, который не является идентификатором, а каким-то порядковым номером. Ответственность за вычисление порядкового номера необязательно может принадлежать заявке.
Например, порядковый номер начинается с 1000 и должен увеличиваться на единицу для каждого нового объекта. Это легко сделать, и это очень удобно в базе данных, и в таких случаях эти конфигурации имеют смысл.
Ответ 4
Другой пример будет в столбце "created_on", где вы хотите, чтобы база данных обрабатывала создание даты