我有一个 Spring JPA 存储库,它的行为方式很奇怪。准确地说,它返回一个看起来都相同的对象列表,尽管底层数据库查询似乎返回了正确的信息。
实体类如下。它对应于MySQL中的View。
@Entity
@Getter
@Cacheable(false)
@Table(name="view_assignment_selector")
public class AssignmentSelectorView {
@EmbeddedId private ID id;
private int areaId;
private String name;
@Enumerated(EnumType.ORDINAL) private Preference preference;
private int assigned;
private int required;
private boolean selected;
@Embeddable @Getter
public static class ID implements Serializable {
private Integer volunteerId;
private Integer sessionId;
}
}
这是存储库:
public interface AssignmentSelectorViewRepository extends JpaRepository<AssignmentSelectorView, AssignmentSelectorView.ID> {
List<AssignmentSelectorView> findByIdVolunteerIdAndIdSessionId(int volunteerId, int sessionId);
}
这是由 MySQL 记录的生成的查询:
SELECT AREAID, ASSIGNED, NAME, PREFERENCE, REQUIRED, SELECTED, SESSIONID, VOLUNTEERID FROM view_assignment_selector WHERE ((VOLUNTEERID = 820) AND (SESSIONID = 32))
当我直接在MySQL中尝试查询时,结果是正确的。但是 AssignmentSelectorView
对象的列表大小正确,但所有条目都与第一个条目相同。
这是怎么回事?
最佳答案
经验教训 - 对 Id 格外小心。 为 View 编写 @Entity 类非常棘手,因为 View 实际上没有主键,但 @Entity 类仍然需要一个 Id。
我原来的 ID 是错误的,因为这两列不是唯一的。我需要第三栏。正确的 ID 是:
@Embeddable @Getter
public static class ID implements Serializable {
private Integer volunteerId;
private Integer sessionId;
private Integer areaId;
}
现在可以了。
关于mysql - Spring JPA Repository 返回相同对象的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49179086/