cześć,
Mam prostą tabelę
CREATE TABLE MyTable (
id INTEGER PRIMARY KEY NOT NULL ,
A_id INTEGER NOT NULL,
B_id INTEGER NOT NULL ,
FOREIGN KEY (B_id) REFERENCES tableB (B_id),
FOREIGN KEY (A_id) REFERENCES tableA (A_id)
);
Moja encja wygląda tak:
@Entity
@Table(name = "MyTable")
public class MyTableEntity
{
private Long id;
private Long A_Id;
// private Long B_Id;
private List<B_Entity> list_of_b_elements;
@Id
@Column(name = "id")
public Long getId() {
return id;
}
public void setId(Long Id) {
this.Id = Id;
}
@Basic
@Column(name = "A_id")
public Long getA_Id() {
return A_Id;
}
public void setA_Id(Long A_Id) {
this.A_Id = A_Id;
}
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.LAZY)
public List<B_Entity> getList_of_b_elements() {
return list_of_b_elements;
}
public void setList_of_b_elements(List<B_Entity> list_of_b_elements) {
this.list_of_b_elements = list_of_b_elements;
}
Funckcja w DAO gdzie podaję A_id
List<MyTableEntity> getMyTableEntityByA_Id( Long a_Id)
{
List<MyTableEntity> myTableEntityList = (List<MyTableEntity>) getCriteria()
.add(Restrictions.eq("A_Id", a_Id))
.setFetchMode("list_of_b_elements", FetchMode.JOIN)
.list();
return myTableEntityList;
}
Chcę dostąc obiekt encji w taki sposób
MyTableEntity:
A_id << ------- for example 32
List<B_Entity> << ----- for example B_1, B_2, B_3 elements
Lub w taki
MyTableEntity:
A_id << ------- for example 32
B_Entity << ----- B_1
A_id << ------- for example 32
B_Entity << ----- B_2
A_id << ------- for example 32
B_Entity << ----- B_3
Chcę żeby była to relacja jednokierunkowa (A_Entity oraz B_Entity nie wiedzą o tym). Funkcja DAO zaciąga tylko poprawnie A_id ale nie mam listy obiektów encji B.
Nie wiem czy przy tak skonstruowanej tabeli (lub encji) mogę otrzymać tylko MyTableEntity w drugi sposób (jedno A_id i jeden obiekt B_Entity)
jeśli tak to czy powinienem zastąpić @OneToMany na
B_Entity b_element;
@OneToOne
public B_Entity get_b_element() {
return b_element;
}