我在我的JPA映射中发现了一种我想编写的模式.一个简单的例子如下:
@OneToMany(fetch=FetchType.EAGER)
@Sort(type=SortType.NATURAL)
private SortedSet<Item> items;
Run Code Online (Sandbox Code Playgroud)
我想创建一个名为SortedOneToMany的注释,我可以应用于上面的集合:
public @interface SortedOneToMany {
FetchType fetch() default EAGER;
SortType sort() default NATURAL;
Class comparator() default void.class;
}
Run Code Online (Sandbox Code Playgroud)
我写了以下方面,以便在看到我的注释时"附加"JPA注释:
public aspect SortedOneToManyAspect {
declare @field: @SortedOneToMany * * : @OneToMany(fetch=FetchType.EAGER);
declare @field: @SortedOneToMany * * : @Sort(type=SortType.NATURAL);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何访问SortedOneToMany注释参数的值并在定义OneToMany和Sort注释时使用它们.在某些情况下,我想更改其中一个默认值,如下所示:
@SortedOneToMany(sort=SortType.COMPARATOR,comparator=ItemComparator.class)
private SortedSet<Item> items;
Run Code Online (Sandbox Code Playgroud)
那么如何将SortedOneToMany中的注释值传递给Sort注释呢?
我已经使用 clojure 一段时间了,但刚开始使用 core.logic。
给定一个域,比如1 2 3 4我想得到一个包含两个向量的向量,比如([[1 2] [3 4]]).
注意:这只是我真正想做的事情的简化版本。:) 见:https : //github.com/adamhoward/lineup
我在网上找到了非会员的这个定义:
(defne not-membero [x l]
([_ []])
([_ [?y . ?r]]
(!= x ?y)
(not-membero x ?r)))
Run Code Online (Sandbox Code Playgroud)
我正在尝试像这样使用它:
(run 1 [q]
(fresh [w x
y z]
(== q [[w x]
[y z]])
(infd w x y z (domain 1 2 3 4))
(everyg distinctfd [[w x] [y z]])
(everyg #(not-membero % [y z]) [w x])))
Run Code Online (Sandbox Code Playgroud)
在 Emacs 中运行它会给我一条Evaluation aborted. …