mysql - Spring JPA Repository 返回相同对象的列表

标签 mysql spring-data-jpa

我有一个 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/

相关文章:

java - 在纯 JPA @Query 中传递 Enum 值有哪些方法?

java - spring data jpa findBy ......多列但保存搜索文本

php - 如何在 LIMIT 子句中应用 bindValue 方法?

php - $_SESSION 存储在哪里?

php - 拉拉维尔 5.5 : Authorization with pivot table

java - Spring Data JPA中的查询语法问题

javascript - 使用模态的 Spring Boot 删除操作

java - 为什么当我尝试将这个大数字存储在 double 中时,我会在 Java 应用程序中得到这个奇怪的结果?

mysql - 为什么带有方括号/圆括号的 UNION SELECT 返回不同的总行数

mysql - 更改数据库结构后更新旧的存储过程