0

阅读本文档,我尝试以这种方式应用于我的代码:

三倍

@Entity
@Table(name = "triple")
@NodeEntity
public class TripleDBMoldelNeoImpl implements TripleDBModel{
    protected List<Annotation> annotations;

    @RelatedTo(type = "subject", elementClass = (Class<? extends NodeBacked>) Concept.class) //This is the suggestion Eclipse gives me
    public Concept subject;
    @RelatedTo(type = "object", elementClass = Concept.class)
    public Concept object;
    @RelatedTo(type = "predicate", elementClass = Concept.class)
    public Concept predicate;


    @ManyToMany(
            cascade={CascadeType.ALL }, 
            fetch=FetchType.LAZY
    )   
    @JoinTable(name = "triple_has_annotation", 
            joinColumns={@JoinColumn(name="uri_concept_subject"), @JoinColumn(name="uri_concept_object"), @JoinColumn(name="uri_concept_predicate") },          
            inverseJoinColumns=@JoinColumn(name="annotation_id") )
    public List<Annotation> getAnnotations() {
        return annotations;
    }
    public void setAnnotations(List<Annotation> annotations) {
        this.annotations = annotations;
    }
    @Id 
    @Column(name = "subject", length = 100)
    public Concept getSubject() {
        return subject;
    }
    public void setSubject(Concept subject) {
        this.subject = subject;
    }

    @Id 
    @Column(name = "object", length = 100)
    public Concept getObject() {
        return object;
    }
    public void setObject(Concept object) {
        this.object = object;
    }
    @Id 
    @Column(name = "predicate", length = 100)
    public Concept getPredicate() {
        return predicate;
    }
    public void setPredicate(Concept predicate) {
        this.predicate = predicate;
    }

概念

@NodeEntity(partial = true)
public class ConceptNeoImpl implements java.io.Serializable, Concept {

    private static final long serialVersionUID = 1L;
    private String uri;
    private String label;
    private String ontologyElement;
    private List<Annotation> annotations;
    @RelatedTo(type = "conceptSub", elementClass = TripleDBModel.class)
    private TripleDBModel triple;

    public TripleDBModel getTriple() {
        return triple;
    }

    public void setTriple(TripleDBModel triple) {
        this.triple = triple;
    }

下图解释了我想要的用途

在此处输入图像描述

然后,表三元组将使用 neo4j,concept 将使用 jpa 和 neo4j。我正在使用 Eclipse IDE 进行编程,它给了我纠正错误的建议。第一个是:

@RelatedTo(type = "conceptUriSubject", elementClass = Concept.class)

正确到

@RelatedTo(type = "conceptUriSubject", elementClass = (Class<? extends NodeBacked>) Concept.class)

然后,问题没有解决,并给了我下一个消息

此行有多个标记 - 注释属性 RelatedTo.elementClass 的值必须是类文字 - 类型安全:从 Class 到 Class NodeBacked 的未经检查的强制转换> - 注释属性 RelatedTo.elementClass 的值必须是类文字 - 类型安全:未经检查从类转换为类 NodeBacked>

任何想法¿¿我对此很陌生,所以我很迷茫,我已经在春季论坛上问过,但没有成功。提前致谢

编辑 我的插件pom.xml

<plugins>
          <plugin>
            <!-- Execute the main class -->
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <mainClass>org.springframework.data.neo4j.examples.hellograph.App</mainClass>
            </configuration>
          </plugin>
          <plugin>
            <!-- IntelliJ Idea Support -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-idea-plugin</artifactId>
            <version>2.2</version>
            <configuration>
              <downloadSources>true</downloadSources>
              <dependenciesAsLibraries>true</dependenciesAsLibraries>
            </configuration>
          </plugin>



            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.0</version>
                <dependencies>
                    <!-- NB: You must use Maven 2.0.9 or above or these are ignored (see 
                        MNG-2972) -->
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjrt</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjtools</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <outxml>true</outxml>
                    <aspectLibraries>
                        <aspectLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-aspects</artifactId>
                        </aspectLibrary>
                        <aspectLibrary>
                            <groupId>org.springframework.data</groupId>
                            <artifactId>spring-data-neo4j</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

        </plugins>

安装在eclipse中的软件 在此处输入图像描述

4

2 回答 2

1

Please install the AspectJ Plugin in your eclipse IDE using this update site:

http://download.eclipse.org/tools/ajdt/36/dev/update

Then you should be able to enable AspectJ support for your project using the context menu.

Your domain class will be enhanced to implement the NodeBacked interface and then the IDE won't give you any errors in the annotations or elsewhere.

Sorry for the confusion. We are going to address those issues in the next release.

Update:

Sorry I didn't notice that earlier but the Concept you put into the elementClass is actually an interface and as it is neither annotated with @NodeEntity nor extending NodeBacked this is the real problem.

I think you also asked the question in the Spring forums, here are my suggestions from there:

Your Concept is an interface and does not extend NodeBacked right now.

In general: the NodeBacked interface is added to classes that have the @NodeEntity annotation.

Then you might try the same solution.

  • either annotate Concept with @NodeEntity too.
  • or have Concept extend NodeBacked on itself

Important: elementClass should rather refer to the concrete implementation (this might work with the interface though as it is just used to check for compatibility with the target).

于 2011-05-16T22:39:20.373 回答
1

Spring Data 使用一些编织技巧(aspectJ)来生成类。你必须在你的 pom 中添加一些插件,比如https://github.com/SpringSource/spring-data-graph-examples/blob/master/hello-worlds/pom.xml

于 2011-05-16T14:00:44.630 回答