我们正在设置一个带有保险柜对象模型的数据库,这些保险柜里面有账单读取器,用于存入账单。这个保险柜存储在Unit类中,该单元有一个占位符列表,用于&#39 ;比方说,3个组成部分。组件可以随时间变化,但占位符将保持连接到同一个保险箱。所以这个单元有3个占位符,标识符如“左读者”,“右读者”和“#39;和'打印机'。这样一个占位符中的实际组件具有产品类型(例如Mei reader ...或JCM reader ...)和序列号。
现在,由于在一个或多个(页面)门户中显示单元本身,因此它将经常从服务器端请求(要查看它自己的序列号,位置,内部有多少钱) ,允许用户登录到这个保险箱等,并且大多数时候我们不想知道组件是否懒得加载它们。设备本身需要知道它的实际组件(配置)和序列号,以便组件能够在机械师维修期间更换组件时知道/告知后端。
有一个中间表(占位符组件),占位符FK,组件FK和日期时间已删除。
现在有一个Unit类除了很多其他内容之外还包含:
@OneToMany(mappedBy = "unit", fetch = FetchType.EAGER)
private List<Placeholder> placeholders = new ArrayList<>();
@XmlElementWrapper(name = "Placeholders")
@XmlElement(name = "Placeholder")
public final List<Placeholder> getPlaceholders() {
return placeholders;
}
public final void setPlaceholders(List<Placeholder> pPlaceholders) {
placeholders = pPlaceholders;
}
占位符类具有:
@OneToMany(mappedBy = "placeholder", fetch = FetchType.LAZY)
private List<PlaceholderComponent> placeholderComponents;
@XmlTransient
public List<PlaceholderComponent> getPlaceholderComponents() {
if (placeholderComponents == null)
placeholderComponents = new ArrayList<PlaceholderComponent>();
return placeholderComponents;
}
public void setOrganizationUnits(List<PlaceholderComponent> pPlaceholderComponents) {
placeholderComponents = pPlaceholderComponents;
}
@XmlElement(name = "Component")
public Component getCurrentComponent() {
if (placeholderComponents == null) {
return null;
} else {
PlaceholderComponent placeComp = placeholderComponents.stream()
.filter(pc -> pc.getDateTimeRemoved() == null)
.findFirst()
.orElse(null);
if (placeComp == null) {
return null;
} else {
return placeComp.getComponent();
}
}
}
在服务中应该有两个可能的调用getUnit&amp; getUnitWithComponents。现在,如果我删除getCurrentComponent()上面的@XmlElement(name =&#34; Component&#34;)注释,并且对getUnit调用中的placeholderComponents不执行任何操作,它会按预期工作,但getUnitWithComponents不起作用(它有效,但不会返回占位符内的组件。当我离开注释时,getUnitWithComponents按预期工作,但是getUnit给出了一个错误,即无法懒惰地加载占位符组件,显然,JAXB想要构建Component元素,即使整个列表没有在服务中调用,因此没有加载。
我可以想到3种可能的解决方案&#39;解决这个问题:
所以主要的问题是:有没有办法让单元格中的组件用于某些调用,并且在没有解决方法的情况下将它们留给大多数调用?如果没有,你会选择什么解决方案? 1,2,3或另一个?