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
...
}

クエリを作成しようとすると

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 とエンティティ Day のフィールドの名前を idwday に変更すると、クエリは機能します

誰か助けてください

4

1 に答える 1

0

クラスにアクセスするEmbeddedIdには、クラスで使用する必要があります。EntityPK

@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;
...
...
}
于 2013-04-04T16:24:54.080 に答える