@Entity
@Table(name="studentloveview")
public class StudentLoveView implements Serializable {    /**
     * 
     */
    private static final long serialVersionUID = 1L;    @Id
    @Column(name="id")
    private Integer id;
    
    @Column(name="sname")
    private String sname;
    
    @Column(name="sex")
    private String sex;
    
    @Temporal(TemporalType.DATE)
    @Column(name="date")
    private Date date;
    
    @Column(name="lname")
    private String lname;    public Integer getId() {
        return this.id;
    }    public void setId(Integer id) {
        this.id = id;
    }    public String getSname() {
        return this.sname;
    }    public void setSname(String sname) {
        this.sname = sname;
    }    public String getSex() {
        return this.sex;
    }    public void setSex(String sex) {
        this.sex = sex;
    }    public Date getDate() {
        return this.date;
    }    public void setDate(Date date) {
        this.date = date;
    }    public String getLname() {
        return this.lname;
    }    public void setLname(String lname) {
        this.lname = lname;
    }
}以上po对应了一个简单的学生爱好的视图,字段分别为
id:学生id
sname:学生姓名
sex:性别
date:日期
lname:爱好在视图中,学生id是重复出现的,因为一个学生有多个爱好。
因为视图没有主键,所以如果映射了@id的话查询结果List中,结果条数是正确的,但是所有id相同的po都会变成数据库中该id第一次出现时的数据。
比如一个学生有3个爱好,视图中应该对应3条数据,查询结果List中应该有3个po,其中lname值不同。但是实际情况是List大小为3没有问题,但是3个po的数据完全相同,值为该学生在视图中的第一条数据。如果去掉@id的映射,又会报No identifier specified for entity: com.pojo.StudentLoveView。这个问题已经困扰我一天了,请高手指教,在线等!!!

解决方案 »

  1.   

    很少用netBeans,帮不上你什么了
      

  2.   

    生成视图的时候,想办法生成一个主键(如行号),
    Hibernate映射的时候,@id加到这个新增的主键字段上,而不是学生id字段上。
      

  3.   

    id:学生id
    sname:学生姓名
    sex:性别
    date:日期
    lname:爱好我觉得LZ的DB设置有点不对,既然爱好是多个的,就考虑下使用外键约束,
    建立一个爱好表
    (
       爱好ID
       学生ID (外键约束)
       爱好名称
    )
    不过我有点不明白,是不是LZ在设置DB TABLE studentloveview的时候,学生ID没有设置为主键,如果是的话,表设计就不对的,这样会数据沉余,建议LZ把学生ID设置为主键