В этом примере из https://docs.oracle.com/javaee/7/tutorial/persistence-criteria002.htmJPA @JoinColumn и отношения между объектами
@Entity
public class Pet {
@Id
protected Long id;
protected String name;
protected String color;
@ManyToOne
protected Set<Person> owners;
...
}
У меня есть два вопроса по этому поводу:
1) Почему не там @JoinColumn аннотаций ниже @ManyToOne?
2) Почему нет спецификатора в @ManyToOne (targetEntity = Person.class)?
3) Значит ли это @ManyToOne, что многие люди отображают одно домашнее животное? Если это так, то почему он задает владельцев? Я подумал, что это должно быть просто
@ManyToOne
protected Person owner;
В этом примере:
@Entity
public class Company {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "company")
private List<Branch> branches;
}
@Entity
public class Branch {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "companyId")
private Company company;
}
В "@JoinColumn (имя = "CompanyID")", почему нет "referencedColumnName = идентификатор"? Это действительно?
Без JoinColumn и referColumnName, откуда вы знаете, через какие поля связаны два объекта? – ling
Это зависит от используемой стратегии именования. Обычно это что-то вроде «name'_id» или «name'Id» (например, company_id или companyId). Преимущество стратегии именования заключается в том, что она позволяет, например, префикс каждого сгенерированного имени таблицы. См. Например - https://docs.jboss.org/hibernate/orm/3/api/org/hibernate/cfg/ImprovedNamingStrategy.html –
Пожалуйста, третий вопрос в классе Pet. Я просто добавил. – ling