我想在openxava的列表模式下过滤标签。
因此,我有一个名为tag(with)的简单实体 int id, String name and String description
)
我有一个嵌入的实体详细信息,其中包含标记引用,如下所示:
@Embeddable
public class Detail {
@ManyToOne(fetch = FetchType.LAZY, optional = true)
private Tag tag;
public Tag getTag() {
return tag;
}
public void setTag(Tag tag) {
this.tag = tag;
}
@Override
public String toString() {
return tag.getName();
}
我的“main”实体,称为target,表示一个对象,应该能够用标签标记它。
因此,我们有一个详细信息的集合,将标记分配给目标,而目标不能用列表模式表示
@Tab(name="TargetTab", editors="List", properties="id, tags, manufacturer.name, owner.name, protocolID, idCreationDate, simDBID, remark, changeDate, photo, xphoto")
@Entity
public class Target implements Serializable {
...
@ElemtentCollection
@ListProperties("tag.number, tag.name, tag.description")
@Embedded
Collection<Detail> details;
public Collection<Detail> getDetails() {
return details;
}
public void setDetails(Collection<Detail> details) {
this.details = details;
tags = details.toString().substring(1, details.toString().length() - 1);
}
...
为了在列表模式下表示标记,我创建了一个字符串,其中填充了标记的名称
...
@ReadOnly
String tags;
...
这将在列表模式下创建一个cloumn“tags”,它由一个字符串表示,如:“a,b,c,d”
对于列表模式下的过滤,openxava默认有一个输入框,您可以在其中键入“a,b”这样的字符串,以获取带有标记“a”和“b”的所有条目
但如果我输入“a,c”,则不会显示结果,即使有标记为“a,b,c,d”的条目
我的目标/问题:
我想要一个灵活的过滤器,在其中我可以键入类似“a,c”的内容并获取所有包含标记“a”和“c”的条目
我试着通过一个 "TagFilter.class"
与 "baseCondition="${tags} = ?"
在目标实体中,没有可用的结果
1条答案
按热度按时间wfauudbj1#
target中的tags属性与details集合的标记值没有关系。target中的tags属性只是表中的一个新列。
您必须选择:
使用@formula定义标记属性
每次添加/删除细节时更新tags属性(可以使用jpa回调方法)