Можно ли использовать как @JoinColumn, так и @Column для того же поля в JPA, включив обновления из обоих?JPA, Combine @JoinColumn и @Column
Допустим, у меня есть объект вроде этого:
@Entity
public class Person{
@JoinColumn(name = "address_id", referencedColumnName = "id")
@ManyToOne
private Address address;
// getters and setters
}
Предполагая, что объект Address уже существует - при создании этого объекта, мне нужно, чтобы извлечь адрес из базы данных, прежде чем сохраняющиеся человека. Это мой текущий дизайн во всем моем приложении, но это может вызвать проблемы с производительностью. Можно ли добавить возможность сохраняться только с использованием идентификатора, сохраняя при этом возможность сохраняться с реальным объектом (для того, чтобы не менять большое количество кода в другом месте)? Что-то вроде этого
@Entity
public class Person{
@JoinColumn(name = "address_id", referencedColumnName = "id")
@ManyToOne
private Address address;
@Column(name="address_id")
private Integer addressId;
// getters and setters
}
em.persist(new Person(1));
em.persist(new Person(getAddress(1)));
Можно ли аннотировать, чтобы разрешить обе эти устойчивые линии? Мое настоящее убеждение состоит в том, что одно из полей должно быть insertable = false
Я не совсем понимаю ваш вопрос. Столбец и JoinColumn - это только аннотации для определения имен и атрибутов столбцов базы данных, никакое отношение не определяется этим. Мой первый вопрос был бы, возможно ли, что адрес используется более чем одним человеком? или имеет адрес одного человека, и если два человека живут по тому же адресу, адрес получает redudant? В любом случае, вы должны использовать аннотацию OneToMany или OneToOne, чтобы определить связь между вашим человеком и вашим адресом, и когда вы определяете каскадирование только для обновления, сохранение или слияние с человеком никогда не создадут адрес. –
Извините, забыл ManyToOne-аннотация –
ваше последнее предположение верно, одно из полей должно иметь 'insertable = false', (а также' updatable = false' и 'deletable = false'), так что поле будет просто прочитанным -единственный. –