对于@OneToMany关系,我是否必须映射到对象?
我有以下示例
@Entity
@Table(name="FOO_TABLE")
public class Foo {
@Id
@Column(name="ID")
@GeneratedValue
private int id;
?????
private List<String> bars;
}
Run Code Online (Sandbox Code Playgroud)
如果酒吧是我会做的对象
@ManyToOne
@JoinColumn(name="ID_FOO")
Run Code Online (Sandbox Code Playgroud)
问题就解决了.但是,我想避免创建一个只表示一对字符串的对象(引用键,值).
FOO和BAR存储在单独的表中
CREATE TABLE Foo (
ID INTEGER NOT NULL AUTO_INCREMENT,
//SOME OTHER PROPERTIES
PRIMARY KEY( ID),
);
CREATE TABLE Bar (
ID_FOO INTEGER,
VAL VARCHAR(256),
PRIMARY KEY (ID_FOO, VAL),
FOREIGN KEY ( ID_FOO) REFERENCES Foo( ID) ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud) 我想执行无向遍历来提取通过某种类型的关系连接的所有 id
当我执行以下查询时,它返回值的速度足够快
MATCH path=(s:Node {entry:"a"})-[:RelType*1..10]-(x:Node)
RETURN collect(distinct ID(x))
Run Code Online (Sandbox Code Playgroud)
然而做
MATCH path=(s:Node {entry:"a"})-[:RelType*]-(x:Node)
RETURN collect(distinct ID(x))
Run Code Online (Sandbox Code Playgroud)
需要大量的时间。我怀疑通过使用*它来搜索从 s 到 x 的每条路径,但由于我只想要 id,所以这些路径可以被丢弃。我真正想要的是 BFS 或 DFS 搜索来查找 s 中的连接节点。
两个查询返回完全相同的结果,因为没有最短路径大于 5 的元素(仅在测试示例中!)。
C是类型的集合Set<T>,F(x)返回Set的集合,我想要做的是在集合之间执行操作,如union,intersection,difference
// C union ( F(X) \ F(Y))
C.addAll( F(X).removeAll( F(Y)))); //error boolean because removeAll returns a boolean
Run Code Online (Sandbox Code Playgroud)
替代方案我可以
C_aux = new HashSet<T> ( F(X));
C_aux.removeAll( F(Y));
C.addAll( C_aux);
Run Code Online (Sandbox Code Playgroud)
无论如何要做到这一点而不宣布辅助集合?(跳过/忽略布尔返回)