我有一个这样的映射:
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(
name="product_product_catalog",
joinColumns={@JoinColumn(name="product_catalog", referencedColumnName="product_catalog")},
inverseJoinColumns={@JoinColumn(name="product", referencedColumnName="product")})
public List<Product> products = new ArrayList<Product>();
我可以很好地获取目录中的产品,但我无法(动态)订购产品。
我怎样才能订购它们?
我可能必须使用 order-by 子句编写多对多 HQL 查询?我想将 orderBy 字段名称字符串传递给查询,或者有更好的解决方案吗?
表格是:
产品,
产品目录,
Product_product_catalog(关联表)
附:使用“玩”!我的实体的框架 JPASupport。
我可以很好地获取目录中的产品,但我无法(动态)订购产品。我怎样才能订购它们?
如果您让 JPA 检索关联,则不可能。映射是静态的,您可以对映射做的最好的事情是指定“检索时间”的顺序:
9.1.28 按注释排序
The OrderBy
注释指定在检索关联时集合值关联的元素的顺序。
@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface OrderBy {
String value() default "";
}
值排序的语法
元素是一个按列表排序, 作为
如下:
orderby_list::= orderby_item [,orderby_item]*
orderby_item::= property_or_field_name [ASC | DESC]
如果未指定 ASC 或 DESC,则假定为 ASC(升序)。
如果未指定排序元素,则假定按关联实体的主键排序。
属性或字段名称必须与关联类的持久属性或字段的名称相对应。排序中使用的属性或字段必须与支持比较运算符的列相对应。
Example:
@Entity public class Course {
...
@ManyToMany
@OrderBy("lastname ASC")
public List<Student> getStudents() {...};
...
}
因此,要么使用自定义查找器,要么使用 Java 对列表进行排序Comparator
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)