Пожалуйста, объясните о вставляемых = ложных и обновляемых = ложных в связи с аннотацией 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", где вы хотите, чтобы база данных обрабатывала создание даты