当前位置: 首页 > 知识库问答 >
问题:

当存在manytomany注释时,Spring data jpa投影重复输出

轩辕鸿
2023-03-14

我有一个user类与一个authority类相关,它们之间有一个manyToMany关系。

@Entity
@Table(name = "user")
public class User {


@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "user_seq")
@SequenceGenerator(name = "user_seq", sequenceName = "user_seq", allocationSize = 1)
private Long id;

@Column(name = "apiKey", updatable = false, nullable = false, unique=true, columnDefinition = "BINARY(16)")    
private UUID apiKey;


@Column(name = "USERNAME", length = 50, unique = true)
@NotNull
@Size(min = 4, max = 50)
private String username;

@Column(name = "PASSWORD", length = 100)
@NotNull
@Size(min = 4, max = 100)
private String password;

@Column(name = "FIRSTNAME", length = 50)
@NotNull
@Size(min = 4, max = 50)
private String firstname;

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
        name = "USER_AUTHORITY",
        joinColumns = {@JoinColumn(name = "USER_ID", referencedColumnName = "ID")},
        inverseJoinColumns = {@JoinColumn(name = "AUTHORITY_ID", referencedColumnName = "ID")})
private List<Authority> authorities;


}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);

    List<UserWithUuid> findAllByNodeId(Long nodeId);  

    interface UserWithUuid {
        String getFirstname();
        String getLastname();       
        String getEmail();
        List<Authority> getAuthorities();
        UUID getApiKey();
    }



}

正如您在输出中看到的,它返回两次相同的用户,但具有不同的角色。

输出

[
    {
        "firstname": "daniel",
        "lastname": "mancera",
        "email": "daniel.mancera@dmance.eu",
        "apiKey": "7961609f-79d4-4ef2-9baa-6809978c038b",
        "authorities": [
            {
                "id": 1,
                "name": "ROLE_USER"
            }
        ]
    },
    {
        "firstname": "daniel",
        "lastname": "mancera",
        "email": "daniel.mancera@dmance.eu",
        "apiKey": "7961609f-79d4-4ef2-9baa-6809978c038b",
        "authorities": [
            {
                "id": 2,
                "name": "ROLE_MANAGER"
            }
        ]
    },
    {
        "firstname": "Roger",
        "lastname": "Rabbit",
        "email": "roger.rabiit@rab.it",
        "apiKey": "023bf60b-e79b-461f-bd30-65a920fe99e4",
        "authorities": [
            {
                "id": 1,
                "name": "ROLE_USER"
            }
        ]
    }
]

共有1个答案

景宏盛
2023-03-14

这很可能是这个Bug https://jira.spring.io/browse/datajpa-1173

Spring Data的当前版本已经修复了这个问题,所以升级您使用的版本应该可以修复这个问题。

 类似资料:
  • 问题内容: 我正在尝试使用复合主键在学生和教学课程之间建立许多联系: 我的课程: 教学班: 集合对象: 现在,主键: 当我尝试对学生进行坚持时,出现以下错误: 我究竟做错了什么? 问题答案: 我解决了这个问题。我映射了Getter而不是field。

  • 如果我有用@component注释标记的bean。而是不同文件夹中的两个bean。一个在com.mycompany.core.bean1中,另一个在com.mycompany.dao.bean2中。当我试图在Bean2中自动连接bean1时,就像: 我需要在bean2中导入带有bean1的包吗?还是它会自己扫描它? UPD:我知道同名的问题。但问题是完全不同的。所以请注意我的问题,如果你现在它,不

  • 问题内容: 我刚刚开始学习Swift。 题: 当我在地图上触摸以放置图钉注释并拖动手指时,它将创建 重复的注释行。 问题答案: Xcode 8.2•Swift 3.0.2 您只需要检查手势识别器的状态,并确定是否可以 。返回。只需在操作方法顶部添加if条件: 如果要允许用户在触摸时移动图钉,则 需要更改手势识别器的状态并在 gestureRecognizer.state更改时更新注释坐标:

  • 我正在尝试链接mysql表(role、user、user_role)。 UserModel实体包含字段“roles”。 当我保存用户时,表'roles'中会自动创建新行。如何取消重复角色?

  • MongoDB 中的投影即查询指定的字段,而不是直接查询文档的全部字段。比如说某个文档中有 5 个字段,而我们只需要其中的 3 个字段,那么就可以使用 MongoDB 中的投影来指定需要查询的 3 个字段。 在《 MongoDB查询文档》一节中我们介绍的 find() 方法,在使用 find() 方法时,如果不设置其中的第二个参数,那么在查询时将返回文档中的所有字段,想要限制要查询的字段,您就需要

  • 我使用的默认贴图如下: 我可以从另一个GeoDataFrame(这里称为sample_gdf)成功地将标签注释到此地图,下面是循环示例: 这就是epsg=4326时的样子当我想改变地图的投影时,问题就开始了。上面变量world的默认CRS是epsg: 4326。一旦我像这样改变投影: 专注于欧洲,我的标签不再出现在正确的位置。一周来,我一直在寻找解决这个问题的建议,但目前找不到任何解决方案。谢谢你