日期:2014-05-17  浏览次数:20723 次

Hibernate注解的方式一对多查询结果全部重复
数据库中有两个表TaskPool,ReportQueryCon,二者一对多(resNumber)----(resNumber,serialno)
taskPool(
resNumber(主键)
reportType
..(其他字段省略)
)
ReportQueryCon(
resNumber
serialno
queryname
queryvalue
)
(联合主键resNumber,serialno)

映射采用注解的方式,代码如下
@Entity
@Table(name="TaskPool")
public class TaskPool implements Serializable{
     private String resNumber;
     ..
     private List<ReportQueryCon> reportQueryConList;
     @Id
     @Column(name="resNumber")
     public String getResNumber(){
     }
     @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
     @JoinColumn(name="resNumber")
     public String getResNumber(){
     }
     ..省略get和set方法
}

@Entity
@Table(name="ReportQueryCon")
public class TaskPool implements Serializable{
     private String resNumber;
     private int serialNo;
     private String queryName;
     private String queryValue;

     @Id
     @Column(name="resNumber")
     public String getResNumber(){
     }
     @Id
     @Column(name="resNumber")
     public int getSerialNo(){
     }
     @Column(name="queryName")
     public String getQueryName(){
     }
     @Column(name="queryValue")
     public String getQueryValue(){
     }
     ..省略set方法
}
@Embeddable
public class ReportQueryConJoinFK implements Serializable{
     private String resNumber;
     private int serialNo;
     ..省略get和set方法
}
目前taskPool表中只有一条数据,对应的ReportQueryCon表中有11条数据,serialNo从1到11

我写了个测试类
publilc static void main(String[] args) throws Exception{
     Session session = new AnnotationConfiguration().configure().bulidSessionFactory().openSession();
     List list = session.createQuery("from TaskPool").list();
     TaskPool taskPool = (TaskPool )list.get(0);
     List<ReportQueryCon> conList = taskPool.getReportQueryConList();
     for(ReportQueryCon con : conList){
           System.out.println(con.getQueryName());
     }
}
执行的结果是:打印11个相同的值
conList集合有11个对象,但问题是这11条数据全是一样的,都是数据库中的serialNo为1的记录,serialNo2-11的记录没有;请问这是什么原因?




------解决方案--------------------
解决了????