谢谢你!
更新虽然@Tobias Liefke建议相当有趣,但我的SQL变化太大,无法为每个SQL创建一个函数类。我尝试实现一个函数类,并将SQL作为参数传递给它,但这不起作用(呈现的SQL用单引号括起来,因此它作为参数而不是作为生成的查询的一部分发送到数据库)
不能在JPQL或条件查询中使用SQL片段...
...除非...
JPA和Hibernate允许在其表达式中使用函数,例如:
... ORDER BY trim(entity.label) ASC
query.orderBy(criteriaBuilder.asc(
criteriaBuilder.function("trim", String.class, root.get(ExampleEntity_.label))));
问题是,这实际上不是对SQL函数trim
的调用,而是对必须注册的JPA函数的调用(Hibernate已经对最常见的SQL函数执行了这一操作)。
幸运的是,您可以在DialtResolver
中定义自己的JPA函数:
public class MyDialectResolver implements DialectResolver {
public Dialect resolveDialect(final DialectResolutionInfo info) {
Dialect dialect = StandardDialectResolver.INSTANCE.resolve(info);
dialect.registerFunction("myOrderFunction", ...);
return dialect;
}
}
registerfunction
采用两个参数,第一个是JPA中函数的名称,另一个是到SQL的映射。
<persistence-unit name="database">
<properties>
<property name="hibernate.dialect_resolvers"
value="my.package.MyDialectResolver" />
</properties>
</persistence-unit>
现在,您可以在包含巨大SQL的SQL server中创建自己的函数,并将其注册为function:
dialect.registerFunction("myOrderFunction",
new StandardSQLFunction("myOrderFunctionInSQL", StringType.INSTANCE));
也可以编写自己的映射,其中包含大量的SQL:
public class MyOrderFunction implements SQLFunction {
public String render((Type firstArgumentType, List arguments,
SessionFactoryImplementor factory) throws QueryException) {
return my_huge_SQL;
}
// ...
}
并注册这一个:
dialect.registerFunction("myOrderFunction", new MyOrderFunction());
@Formula("my huge SQL")
private String orderAttribute;
现在可以按以下属性排序:
... ORDER BY entity.orderAttribute ASC
Resp.
query.orderBy(criteriaBuilder.asc(root.get(ExampleEntity_.orderAttribute))));
我只推荐这个解决方案,如果您无论如何都需要您的模型中巨大的SQL的结果。否则,它只会污染实体模型,并将SQL添加到实体的每个查询中(除非您用@basic(fetch=fetchType.lazy)
标记它,并使用字节码检测)。
WooCommerce默认使用post ID作为订单号,post可以是订单,也可以是产品、页面、文章或其它的custom post type,所以这个ID是不连续的,人们并不能简单的通过订单号去猜测你网站的销量。但这也给商店管理者带来一定困扰,拿到一个订单号,却无法知道是什么时候的订单,是哪个商店的订单。所以要给订单号加前缀,前缀里带上具体时间和一个序号,就能解决这个问题。 用代码自定义订单号的显
我正在使用WooCommerce REST API(http://woocommerce.github.io/woocommerce-rest-api-docs/#introduction),能够成功下载客户,订单等。 我的客户在结帐页面中添加了一些自定义字段,例如: 我希望在请求订单时能够获得这些自定义字段,例如: 目前,当我收到订单时,没有返回任何自定义字段。我试着加上 到请求URL,但这没有
有部分条件如 target_os 在使用 rustc 时会隐式地提供,但是自定义条件必须使用 --cfg 标记来传给 rustc。 #[cfg(some_condition)] fn conditional_function() { println!("condition met!") } fn main() { conditional_function(); } 不使用自定义的
以下仅在WooCommerce Admin single orders中显示产品自定义字段回答我的上一个问题,其中: 添加自定义SKU字段(ArticleID) 将自定义SKU(ArticleID)保存为隐藏订单项元数据 将自定义SKU(ArticleID)保存为手动订单的隐藏订单项元数据 然而,最后一部分(手动订单)似乎与我为网关费用添加的其他自定义代码相冲突: 当我尝试更新或更改已应用网关费用
我正在使用WooCommerce REST API(http://WooCommerce.github.io/woocommerce-rest-api-docs/#introduction),并使用下面的示例在结帐页面中添加了一个新字段(shipping_phone): https://docs.woocommerce.com/document/tutorial-customising-check
我有一家woocommerce商店,想定制我的产品。用户直接访问类别页面,无店铺存档页面。 你有没有什么好的方法来定制订单?我试着使用插件,并给那些产品一个编号。。。但一切都没有奏效。 问候