- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个名为 HasContact
的 @RelationshipEntity
。我实例化并创建一个新的 HasContact
关系,如下所示:
HasContact adminClerk = new HasContact (company, employee, "Admin Clerk")
template.save (adminClerk);
我的 RelationshipEntity
类如下所示:
@RelationshipEntity(type="HAS_CONTACT")
public class HasContact {
@GraphId
Long id;
@StartNode
Company company;
@EndNode
Employee employee;
String role;
public HasContact() {
// Empty Constructor
}
public HasContact(Company company, Employee employee, String role) {
this.company = company
this.employee = employee
this.role = role;
}
/*** Gettes and Setters ***/
...
}
在上面的简单示例中,关系是持久的,但关系上的角色属性却不是。有什么想法为什么不吗?我该如何解决这个问题?
最佳答案
我怀疑这是 3.x 代码库中的一个错误——我遇到了同样的问题,我花了大约半天的时间试图找出这个问题。
我的设置 ID 使用 SpringBoot 和 Spring 4.1.6 以及 Neo-Data 3.3.0.RELEASE(然后是 3.4.0.M1)。 4.1.6 Spring 显然存在一些问题,这是我使用 Neo4j 的第一个项目,所以我可能遗漏了一些东西,并且很高兴有人告诉我我遗漏了什么......
我观察到,对于保存的单个关系实体,实际 Neo4j 数据库有两次写入 - 第一个正确设置属性,第二个删除所有“额外的” “属性。
请引用以下 SourceStateTransmitter.java (3.4.0.M1) 的摘录,其中属性已正确设置(大约第 102/105 行),然后被第 109 行的 UpdateableState 刷新覆盖。
101 // todo take mapping policies for attributes into account
102 persistentEntity.doWithProperties(new PropertyHandler<Neo4jPersistentProperty>() {
103 @Override
104 public void doWithPersistentProperty(Neo4jPersistentProperty property) {
105 setEntityStateValue(property, entityState, wrapper, property.getMappingPolicy());
106 }
107 });
108 if (target instanceof UpdateableState) {
109 ((UpdateableState)target).flush();
110 }
例如在第 105 行之后,检查 Neo4j 数据库会根据需要显示与属性的关系,但是一旦执行第 109 行,它就会使用仅具有一个属性(关系类型)的映射覆盖新创建的实体。
我尝试使用 https://github.com/spring-projects/spring-data-neo4j 中的最新 3.x 版本重新创建作为测试。 ——但是,我尝试的测试使用的是 ImpermanentGraphDatabase,在本例中它并不等效。
当协议(protocol)涉及与实际 Neo4j 数据库的通信时,entityStateHandler.useOrCreateState() 最终创建 2 个具有不同属性映射的对象来写入关系。关系属性最终被正确写入一个映射(例如,与第 102-105 行相关的写入相关)——但是该映射与第 109 行刷新目标时包含/使用的属性映射不相交(除了基本关系类型/标签信息之外,它是空的)。
当协议(protocol)涉及 ImpermanentGraphDatabase 时,我假设它最终会得到一个共享实例(例如,两个创建步骤都会生成相同的对象 - 在内存中与与端点的实际 REST 通信中),因此不存在一致性问题。
所以我无法生成一个测试用例来打破这个问题,但我仍然相当确定这是一个错误。由于我是 Spring-Data-Neo4j 的新手,我确信可能会遗漏一些东西。
(嗯..想知道这在 4.0 中是否效果更好——这里没有提到 http://projects.spring.io/spring-data-neo4j/ 。但由于有一个新的重写,似乎是 future 的方向,不确定这是否会得到修复)
关于java - Spring-Data-Neo4J:如何保存关系上的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30371633/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!