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