У меня есть эти 2 стола Учителя и контакт, у учителя может быть x Контакты. Итак, мы смотрим на ассоциацию @OneToMany.Hibernate - OneToMany - Несколько столбцов
Таблицы Структура:
пользователя [идентификатор пользователя, имя пользователя, адрес электронной почты, ...]
Контакт [ContactID, CONTACTNAME, хол, переменная типа RefType ...]
Я хочу загрузите из моего User Class все контакты пользователя. Для этого я хотел бы сделать запрос как
Select * from contact as c WHERE c.ref=8240 AND c.reftype='T';
8240 является случайным Идент и переменная типа RefType T является для учителя. Поскольку эта контактная таблица используется также для контактов в школе и/или любого другого типа клиентов, которые мы могли бы иметь. Проблема в том, что я понятия не имею, как это сделать с Hibernate. Должен ли я использовать embedbedId? Или JoinColumns?
То, что я сделал до сих пор, чтобы связать мой учитель к контактам, имеющим contact.ref=teacher.teacherid
, но то, что я хочу это:
contact.ref=teacher.teacherid AND contact.reftype='T'
Как я могу это сделать?
Вот мой код Teacher.class
private Integer teacherid;
private Set<Contact> contact;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "teacherid", unique = true, nullable = false)
public Integer getTeacherId() {
return teacherid;
}
@OneToMany(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name="ref"),
})
public Set<Contact> getContact() {
return contact;
}
public void setContact(Set<Contact> contact) {
this.contact = contact;
}
Contact.class
@Entity
@Table(name = "contact")
public class Contact implements java.io.Serializable {
private Integer contactid;
private String contactname;
private String contacttype;
private String reftype;
private int ref;
/*private Teacher teacher;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "ref"),
@JoinColumn(name = "reftype")
})
public Teacher getTeacher() {
return teacher;
}
public void setTeacher (Teacher teacher) {
this.teacher= teacher;
}
*/
private Set<ContactItem> contactItems;
private Set<ContactAddress> contactAddressess;
@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="contactid")
public Set<ContactItem> getContactItems(){
return contactItems;
}
public void setContactItems(Set<ContactItem> contactItems) {
this.contactItems = contactItems;
}
@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="contactid")
public Set<ContactAddress> getContactAddressess(){
return contactAddressess;
}
public void setContactAddressess(Set<ContactAddress> contactAddressess) {
this.contactAddressess = contactAddressess;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "contactid", unique = true, nullable = false)
public Integer getContactid() {
return this.contactid;
}
public void setContactid(Integer contactid) {
this.contactid = contactid;
}
@Column(name = "contactname", nullable = false)
public String getContactname() {
return this.contactname;
}
public void setContactname(String contactname) {
this.contactname = contactname;
}
@Column(name = "contacttype", nullable = false)
public String getContacttype() {
return this.contacttype;
}
public void setContacttype(String contacttype) {
this.contacttype = contacttype;
}
@Column(name = "reftype", nullable = false, length = 1)
public String getReftype() {
return this.reftype;
}
public void setReftype(String reftype) {
this.reftype = reftype;
}
@Column(name = "ref", nullable = false)
public int getRef() {
return this.ref;
}
public void setRef(int ref) {
this.ref = ref;
}
public String toString(){
return "\n#"+this.contactname+" : ("+this.ref+"-"+this.reftype+") \n"
+"#Items-----\n"+getContactItems()+"\n"
+"#Address---\n"+getContactAddressess()+"\n";
}
}
Является ли 'учитель'' пользователем' (почему вы показываете таблицу пользователя, если нет)? У вас есть какое-то наследство? У вас есть ограничение внешнего ключа в столбце 'ref'? –
Даже с вашими изменениями, я думаю, что мой ответ ниже по-прежнему в целом правильный. Вам нужно будет изменить данные, чтобы они соответствовали вашей ситуации. –
Я лично считаю, что в дизайне что-то не так. Просьба уточнить связь между пользователем/учителем и контактом, это важно. –