2013-04-04 135 views
0
@Entity 
@Table(name = "t_wday") 
@IdClass(DayPk.class) 
public class Day { 
    @Id 
    private Date id; 
.. 
.. 
} 

@Embeddable 
public class DayPk { 
    @Column(name = "idwday") 
    private Date id; 
... 
... other key properties 
... 
} 


@Entity 
@Table(name = "t_assigned") 
@IdClass(AssignedPk.class) 
public class Assigned { 
    @Id 
    @ManyToOne 
    private Day day; 
... 
... 
} 


@Embeddable 
public class AssignedPk { 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumns({ 
      @JoinColumn(name = "t_wday_idwday", referencedColumnName = "idwday"), 
      @JoinColumn(name = "t_user_iduser", referencedColumnName = "t_user_iduser") 
    }) 
    private Day day; 

... 
... other key properties 
... 
} 

当我尝试创建查询无法解析属性的Hibernate查询

getSession().createQuery("FROM Day as day WHERE day.user = :user YEAR(day.id) = :year") 

它的工作原理,但是当我试图像

getSession().createQuery("FROM Assigned as assig WHERE YEAR(assig.day.id) = :year") 

创建查询我有一个例外

could not resolve property: day.id of: com.db.entity.Assigned ..... 

但如果我重新命名DayPk的字段ID和字段在实体日至idwday查询是工作

请人帮忙

+0

看来它依赖于'@ IdClass'注解! – boomz 2013-04-04 13:07:52

+0

您是否尝试从Assigned实体中删除@IdClass(AssignedPk.class)注释?即使它不是解决方案,当前的代码也是不正确的。 – kostja 2013-04-04 13:09:03

回答

0

您应该使用EmbeddedIdEntity类访问PK类。

@Embeddable 
public class DayPk { 
    @Column(name = "idwday") 
    private Date id; 
... 
... other key properties 
... 
} 

@Entity 
@Table(name = "t_wday") 
public class Day { 
    @EmbeddedId DayPk id; 
.. 
} 


@Embeddable 
public class AssignedPk { 
    private Day day; 

... 
... other key properties 
... 
} 

@Entity 
@Table(name = "t_assigned") 
@IdClass(AssignedPk.class) 
public class Assigned { 
     @EmbeddedId AssignedPk id; 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumns({ 
      @JoinColumn(name = "t_wday_idwday", referencedColumnName = "idwday"), 
      @JoinColumn(name = "t_user_iduser", referencedColumnName = "t_user_iduser") 
    }) 
    private Day day; 
... 
... 
} 
相关问题