gpt4 book ai didi

java - 在 Spring JPA 中关联嵌套对象 ID

转载 作者:行者123 更新时间:2023-12-01 09:12:09 25 4
gpt4 key购买 nike

在我的 Spring MVC/JPA 应用程序中,我根据数据库表定义了用户和部门实体。通常,许多用户可以属于一个部门,因此我的用户类中有以下内容

@Entity(name = "USER")
public class User {

@Id
@Column(name = "Username")
private String username;

@ManyToOne
@JoinColumn(name = "Department")
private Department department;

}

当需要保存新用户时,我必须将该用户与部门 ID 相关联

User
username | BobbySurfs2020
departmentId | 43

我是否需要在我的 User 对象上定义一个额外的 departmentId 字段来建立此关联,或者我可以以某种方式使用嵌入式 Department 对象通过我的 setter setDepartment() 设置此 ID?

更新/附加想法:

是否有必要像我这里一样将 Department 嵌套在 User 对象中?我认为为我获取的每个用户存储一个部门会比仅关联部门 ID 占用更多的内存。这样,如果我随时需要部门信息,我只需通过与用户关联的 ID 即可查找它们。想法?

非常感谢!

最佳答案

我是否需要在我的 User 对象上定义一个额外的 DepartmentId 字段才能进行此关联。

没有

是否有必要像我这里一样将 Department 嵌套在 User 对象中?

是的。您正在使用对象关系映射器来映射对象。

在 MVC 世界中,您可以通过转换器轻松处理此问题,该转换器将获取从 UI 传递的 ID,查找相关实体并将其设置在正在编辑的实体上。

@Component
public class StringToDepartmentConverter implements Converter<String, Department> {

@Autowired
private DepartmentService service;

/**
*departmentId is the HTTP post param passed in by the framework
*/
public Department convert(String departmentId ) {
return service.findDepartment(Integer.parseInt(departmentId ));
}
}

将其注册到框架:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "..." })
public class MvcConfiguration extends WebMvcConfigurerAdapter{

//other configuration

@Override
public void addFormatters(FormatterRegistry formatterRegistry) {
formatterRegistry.addConverter(departmentConverter());
}

@Bean
public StringToDepartmentConverter departmentConverter(){
return new StringToDepartmentConverter ();
}
}

关于java - 在 Spring JPA 中关联嵌套对象 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40851996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com