在一个宠物项目(cassandra,spark,hadoop,kafka)上工作我需要一个数据序列化框架.检查常见的三个框架 - 即Thrift,Avro和Protocolbuffers - 我注意到它们中的大多数似乎都死了,最多每年有2个小版本.
这让我有两个假设:
如果有人能给我一些暗示我的假设,欢迎任何意见.
我开始使用Spring Data JPA在Spring Boot应用程序上设置用户和角色之间的ManyToMany关系.
此关系在User类中定义如下:
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name="user_role", joinColumns = {@JoinColumn(name="user_id")}, inverseJoinColumns = {@JoinColumn(name="role_id")})
private Set<UserRole> roles;
Run Code Online (Sandbox Code Playgroud)
我用以下方法创建角色
@Transactional
private void generateSeedRoles() {
UserRole adminRole = new UserRole(RoleEnum.ADMIN.toString());
userRoleRepository.save(adminRole);
UserRole userRole = new UserRole(RoleEnum.USER.toString());
userRoleRepository.save(userRole);
}
Run Code Online (Sandbox Code Playgroud)
之后为用户分配角色失败:
@Transactional
private void generateSeedUsers() {
UserRole adminRole = userRoleRepository.findUserRoleByRoleName("ADMIN");
User user = User.createUser("user1", "user1@user.com", "pass");
user.setRoles(new HashSet<UserRole>(Arrays.asList(adminRole)));
userRepository.save(user);
}
Run Code Online (Sandbox Code Playgroud)
抛出以下异常(为便于阅读而格式化):
org.springframework.dao.InvalidDataAccessApiUsageException:
detached entity passed to persist: co.feeb.models.UserRole;
nested exception is org.hibernate.PersistentObjectException:
detached entity passed to persist: co.feeb.models.UserRole
Run Code Online (Sandbox Code Playgroud)
但是,如果在创建关系之前保存用户,则它可以正常工作:
@Transactional …Run Code Online (Sandbox Code Playgroud)