Возникла проблема с загрузкой объекта из базы данных с использованием Hibernate.
У меня есть три класса java: "A", "B" и "C".
A и B связаны как отношение «мама-ко-многим» с помощью дополнительной таблицы «a_join_b».
A и C связаны как отношение многие-к-одному.
Есть код:
@Entity
@Table(name = "A")
public class AclassEnt implements java.io.Serializable{
@Id
@TableGenerator(name = "inventory",
table = "hibernate_sequences",
pkColumnName = "sequence_name",
pkColumnValue = "Emp_Gen",
valueColumnName = "sequence_next_hi_value",
initialValue = 0,
allocationSize = 100)
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "A_ID", nullable = false)
private Integer aId;
@Column(name = "A_NUMBER", length = 20)
private String aNumber;
@Column(name = "A_NAME", length = 15)
private String aName;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE},
fetch = FetchType.EAGER,
targetEntity=WorkersEnt.class)
@JoinColumn(name="C_ID")
private CclassEnt cclass;
@ManyToMany(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY,targetEntity = BclassEnt.class)
@JoinTable(name = "A_join_B", joinColumns = { @JoinColumn(name = "A_ID") }, inverseJoinColumns = { @JoinColumn(name = "B_ID") })
private Set<BclassEnt> BclassList=new HashSet<BclassEnt>();
//getters and settrs
}
@Entity
@Table(name = "B")
public class MeasureTypeEnt implements java.io.Serializable{
@Id
@TableGenerator(name = "inventory",
table = "hibernate_sequences",
pkColumnName = "sequence_name",
pkColumnValue = "Emp_Gen",
valueColumnName = "sequence_next_hi_value",
initialValue = 0,
allocationSize = 100)
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "B_ID", nullable = false)
private Integer bId;
@Basic(optional = false)
@Column(name = "B_NAME", nullable = false, length = 100)
private String bName;
//getters and setters
}
Вопрос: как я могу загрузить объект "AclassEnt" с полями Hext: aId, aName, cclass и BclassList ???
Используя следующий код, я могу загрузить все столбцы, что мне нужно, кроме одного последнего. Я имею в виду "BclassList".
Criteria crit = session.createCriteria(AclassEnt.class,"c");
crit.createAlias("cclass", "cclass")
.createAlias("BclassList", "BclassList")//<-- is it correctly?
.setProjection( Projections.projectionList()
.add(Projections.property("c.aId").as("aId"))
.add(Projections.property("c.aName").as("aName"))
.add(Projections.property("c.cclass").as("cclass"))
.add(Projections.property("c.BclassList").as("BclassList"))//<-- is it correctly?
);
AclassEnt result = crit.setResultTransformer(new AliasToBeanResultTransformer( AclassEnt.class )).list();