Java 在Spring数据JDBC中使用带@Id注释的复合实体有什么影响?
我的SpringDataJDBC项目中有一个复合实体类,如下所示,它可以映射到表项 虽然字段id、code和itemName来自表item,但字段groupName属于另一个表item\u group 我使用存储库中的自定义查询成功加载了此实体对象,如下所示:Java 在Spring数据JDBC中使用带@Id注释的复合实体有什么影响?,java,spring-data,spring-data-jdbc,Java,Spring Data,Spring Data Jdbc,我的SpringDataJDBC项目中有一个复合实体类,如下所示,它可以映射到表项 虽然字段id、code和itemName来自表item,但字段groupName属于另一个表item\u group 我使用存储库中的自定义查询成功加载了此实体对象,如下所示: "SELECT a.id, a.code, a.name AS item_name, b.name as group_name from item a LEFT JOIN item_group b ON a.group_id =
"SELECT a.id, a.code, a.name AS item_name, b.name as group_name from item a LEFT JOIN item_group b ON a.group_id = b.id where a.id=:id")
像这样使用@Id注释的复合类有什么影响吗
public class Item
{
@Id
private long id;
private String code;
private String itemName;
private String groupName;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
乍一看,这看起来确实不对劲 您将无法加载,更不用说使用标准CRUD方法保存它了 它看起来也是错误的,因为它看起来像是在合并两个聚合:Item和Group,这两个聚合实际上应该是独立的聚合,它们之间没有Java引用。看 但是如果你认为它是专门的语境的话,它确实是有意义的。 如果您只需要从数据库中读取它,那么这是一种非常有效的方法。它简单高效,因为它在一个select中加载所有必需的数据 假设您正处于这种情况,我建议您: 在数据库中为联接创建视图。否则,联接将在每个查询中重复一次又一次。 如果您有这样一个视图,您实际上可以删除@Query注释,只需使用标准的find。。。方法。 不要让您的存储库扩展crudepository,而只是手动添加您实际需要的方法。这避免了混淆,并且很明显,此存储库和实体只能用于读取。 如果您使用标准查找。。。方法必须具有正确注释的id属性。如果你不使用查找。。。方法时,@Id注释是多余的。
乍一看,这看起来确实不对劲 您将无法加载,更不用说使用标准CRUD方法保存它了 它看起来也是错误的,因为它看起来像是在合并两个聚合:Item和Group,这两个聚合实际上应该是独立的聚合,它们之间没有Java引用。看 但是如果你认为它是专门的语境的话,它确实是有意义的。 如果您只需要从数据库中读取它,那么这是一种非常有效的方法。它简单高效,因为它在一个select中加载所有必需的数据 假设您正处于这种情况,我建议您: 在数据库中为联接创建视图。否则,联接将在每个查询中重复一次又一次。 如果您有这样一个视图,您实际上可以删除@Query注释,只需使用标准的find。。。方法。 不要让您的存储库扩展crudepository,而只是手动添加您实际需要的方法。这避免了混淆,并且很明显,此存储库和实体只能用于读取。 如果您使用标准查找。。。方法必须具有正确注释的id属性。如果你不使用查找。。。方法时,@Id注释是多余的。
我认为这是非常糟糕的做法。最好有一个ItemGroup实体。实际上,我的要求是使用“Item”实体从“Item”表中捕获所有细节。由于“item”表只有组id,所以我必须加入“item\u group”表以获取组的名称。在上面的查询中,我只在'Item'entity.magicmn中加载组名,我在问题中对表中字段的分布进行了更正。我认为这是非常糟糕的做法。最好有一个ItemGroup实体。实际上,我的要求是使用“Item”实体从“Item”表中捕获所有细节。由于“item”表只有组id,所以我必须加入“item\u group”表以获取组的名称。在上面的查询中,我只在'Item'entity.magicmn中加载组名,我在关于表中字段分布的问题中做了一个更正。非常感谢Jens。注意到你的建议。非常感谢Jens。注意你的建议。