【发布时间】:2021-01-20 11:21:36
【问题描述】:
我有几个实体,这些是休眠映射的。菜单、菜单详细信息、语言。当菜单存在时,该实体最重要的属性是它的 id。有几种语言的 id 为“nl”、“en”、“fr”。例如,当用户使用 3 种语言时,他们可以在菜单内的 OneToMany 列表中创建具有 3 个 MenuDetails 的菜单。当我尝试通过 id 获取菜单时,我得到了所有的 MenuDetails。但是,我如何能够获取列表中只有一个 MenuDetails 实体的菜单,例如 id 'nl'?有人能帮我吗。现在我手动进行关联,但这需要很多网络和 CPU 资源。
@Entity
@Table(name = "menus")
public class Menu {
@Id
@Column(length = 36, insertable = false, updatable = false, nullable = false)
private String id = UUID.randomUUID().toString();
private String shopId;
private Integer sequence;
private Character status;
@Transient
private List<MenuDetails> menuDetails;
@Transient
private List<Category> categories;
public Menu setId(String id) {
this.id = id;
return this;
}
public String getId() {
return id;
}
public Menu setShopId(String shopId) {
this.shopId = shopId;
return this;
}
public String getShopId() {
return shopId;
}
public Menu setMenuDetails(List<MenuDetails> menuDetails) {
this.menuDetails = menuDetails;
return this;
}
public List<MenuDetails> getMenuDetails() {
return menuDetails;
}
public Menu setCategories(List<Category> categories) {
this.categories = categories;
return this;
}
public List<Category> getCategories() {
return categories;
}
public Integer getSequence() {
return sequence;
}
public Menu setSequence(Integer sequence) {
this.sequence = sequence;
return this;
}
public Character getStatus() {
return status;
}
public Menu setStatus(Character status) {
this.status = status;
return this;
}
}
@Entity
@IdClass(MenuDetailsId.class)
@Table(name = "menu_details")
public class MenuDetails {
@Id
private String menuId;
@Id
private String languageCode;
private String name;
// Empty constructor required for composite primary key
public MenuDetails(){ super(); }
public String getMenuId() { return menuId; }
public MenuDetails setMenuId(String menuId) {
this.menuId = menuId;
return this;
}
public String getLanguageCode() { return languageCode; }
public MenuDetails setLanguageCode(String languageCode) {
this.languageCode = languageCode;
return this;
}
public String getName() { return name; }
public MenuDetails setName(String name) {
this.name = name;
return this;
}
public static MenuDetails createEmpty(String menuId, String languageCode) {
return new MenuDetails()
.setMenuId(menuId)
.setLanguageCode(languageCode)
.setName("");
}
}
@Entity
@Table(name = "languages")
public class Language {
@Id
@Column(length = 36, updatable = false, nullable = false)
private String id;
@Column(length = 5)
private String code;
private String name;
private String iconUrl;
public Language setId(String id){
this.id = id;
return this;
}
public String getId(){ return id; }
public Language setCode(String code){
this.code = code;
return this;
}
public String getCode(){ return code; }
public Language setName(String name){
this.name = name;
return this;
}
public String getName(){ return name; }
public Language setIconUrl(String iconUrl){
this.iconUrl = iconUrl;
return this;
}
public String getIconUrl(){ return iconUrl; }
}
【问题讨论】:
-
您能分享您当前的方法和相关实体吗?
-
code@Entity @Table(name = "menus") public class Menu { @Id @Column(length = 36, insertable = false, updatable = false, nullable = false) private String id = UUID.randomUUID().toString();私人字符串 shopId;私有整数序列;私人角色状态; @Transient 私有 ListmenuDetails; @Transient 私有 List 类别; code -
code@Entity @IdClass(MenuDetailsId.class) @Table(name = "menu_details") public class MenuDetails { @Id private String menuId; @Id 私有字符串语言代码;私有字符串名称; -
code@Entity @Table(name = "languages") public class Language { @Id @Column(length = 36, updatable = false, nullable = false) private String id; @Column(length = 5) 私有字符串代码;私有字符串名称;私有字符串 iconUrl; -
还有一些实体,例如,categories,category_details,products,product_details,supplements,condiments,allergens,zones,tables,...
标签: java sql spring-boot hibernate one-to-many