최대 절전 모드를 사용하여 데이터베이스에서 개체를로드에 문제가 있습니다. "A", "B"와 "C"최대 절전 모드
나는 세 개의 자바 클래스를 가지고있다. A와 B은 추가 테이블 "a_join_b"에 의해 mamy-to-many 관계로 연관됩니다. 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
}
질문 :
코드가 어떻게 hext 필드와 객체 "AclassEnt"를로드 할 수 원조, aName, cclass 및 BclassList ??? 나는 마지막 exept 필요한 모든 COLS을로드 할 수 있습니다 다음 코드를 사용하여
. 나는 "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();
불가능합니다. 기준 쿼리는 스칼라 또는 엔터티를 반환하지만 둘 모두를 반환하지는 않습니다. 하지만 당신 쿼리는 aNumber를 제외하고 A와 B, C를 포함한 모든 것을로드하는 것으로 보입니다. 왜 열이로드되지 않게해야합니까? –
JB Nizet, 단지 예일뿐입니다. Aclass의 실제 프로그램에서 20 개 이상의 열. 이제는 간단한 보고서를 만들어야하는데, 그 중 일부만 사용합니다. 나는 단지 5 ~ 6 개가 필요할 때 전체 객체 (23 개 열)를로드하는 것이 잘못되었다고 생각합니다. – Vadim
그런 다음 B 및 C 속성에 대한 투영을 작성하고 직접 개체 그래프를 다시 만들어야합니다. 23 열에 대해서는별로 신경 쓰지 않을 것입니다. 그것들을 얻는 비용은 아마도 조인으로 질의를 실행하는 비용에 비해 무시할 만하다. –