Для каждого субъекта у меня есть объект A, скажем, с колонкой a1 (PK), a2.
Сущность B, с колонкой a2 (PK), b1
Объект C, с колонкой b1 (PK), c1
Итак, A присоединяется к B с помощью a2, а затем присоединяется к C с помощью b1.
(Все они относятся один к одному)
Эти сущности используются в веб-сервисе, когда при вызове генерирует файл XML, содержащий список этих сущностей.
Теперь генерировать XML, объединяющий сущности A и B с полями a1, a2, a1, очень просто.
Но какой синтаксис / аннотации необходимы, если я хочу создать XML, который показывает только сущность A и сущность C? Я имею в виду, как мне настроить эту сущность А, чтобы она позволила этому случиться?
Я также решу, смогу ли я получить все поля от объекта A, B, C.
Я использую jpa2, ejb3.1
Редактировать: Добавление примеров.
юридическое лицо A
@Entity
@Table(name = "TABLE_A")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "MyComplex.findAll", query = "SELECT j FROM MyComplex j"),
@NamedQuery(name = "MyComplex.findA1", query = "SELECT j FROM MyComplex j WHERE j.a1 = :A1")
})
public class MyComplex implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "A1", length = 1)
private String a1;
@Column(name = "A2", length = 1)
private String a2;
public MyComplex() {
}
public MyComplex(String a1) {
this.a1 = a1;
}
public String getA1() {
return a1;
}
public void setA1(String a1) {
this.a1 = a1;
}
public String getA2() {
return a2;
}
public void setA2(String a2) {
this.a2 = a2;
}
@Override
public int hashCode() {
int hash = 0;
hash += (a1 != null ? a1.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof MyComplex)) {
return false;
}
MyComplex other = (MyComplex) object;
if ((this.a1 == null && other.a1 != null) || (this.a1 != null && !this.a1.equals(other.a1))) {
return false;
}
return true;
}
@Override
public String toString() {
return "jpa.mypackage.Table_A[a1=" + a1 + " ]";
}
}
сущность B
@Entity
@Table(name = "TABLE_B")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Table_B.findAll", query = "SELECT j FROM Table_B j"),
@NamedQuery(name = "Table_B.findA2", query = "SELECT j FROM Table_B j WHERE j.a2 = :A2")
})
public class Table_B implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "A2", length = 1)
private String a2;
@Size(max = 1)
@Column(name = "B1", length = 1)
private String b1;
//entity constructor here
//entity get/set methods here
//entity hash methods here
}
сущность C
@Entity
@Table(name = "TABLE_C")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Table_C.findAll", query = "SELECT j FROM Table_C j"),
@NamedQuery(name = "Table_C.findB1", query = "SELECT j FROM Table_C j WHERE j.b1 = :B1")
})
public class Table_C implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "B1", length = 1)
private String b1;
@Size(max = 1)
@Column(name = "C1", length = 1)
private String c1;
//entity constructor here
//entity get/set methods here
//entity hash methods here
}
Изменение объекта A для присоединения к объекту B
@Entity
@Table(name = "TABLE_A")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "MyComplex.findAll", query = "SELECT j FROM MyComplex j"),
@NamedQuery(name = "MyComplex.findA1", query = "SELECT j FROM MyComplex j WHERE j.a1 = :A1")
})
public class MyComplex implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "A1", length = 1)
private String a1;
@Column(name = "A2", length = 1)
private String a2;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="A2", referencedColumnName="A2")
private Table_B table_B;
//entity constructor here
//entity get/set methods here
public Table_B getTable_B() {
return table_B;
}
public void setTable_B(Table_B table_B) {
this.table_B = table_B;
}
//entity hash methods here
}