@RelatedTo(elementClass = Concept.class) RelatedTo.elementClass должен быть литром класса
Читая эту документацию, я попытался применить свой код следующим образом:
тройной
@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;
}
Использование я хочу объяснить на изображении ниже
Тогда таблица triple будет использовать neo4j, а концепция будет использовать jpa и neo4j. Я программирую, используя Eclipse IDE, и он дает мне предложения по исправлению ошибок. Первый из них:
@RelatedTo(type = "conceptUriSubject", elementClass = Concept.class)
исправить до
@RelatedTo(type = "conceptUriSubject", elementClass = (Class<? extends NodeBacked>) Concept.class)
И тогда, проблема не решена, и выдает мне следующее сообщение
Несколько маркеров в этой строке - значение атрибута аннотации RelatedTo.elementClass должно быть литералом класса. - Тип безопасности: не проверено приведение класса к классу. 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
2 ответа
Пожалуйста, установите плагин AspectJ в вашу среду Eclipse, используя этот сайт обновления:
http://download.eclipse.org/tools/ajdt/36/dev/update
Тогда вы сможете включить поддержку AspectJ для вашего проекта, используя контекстное меню.
Ваш класс домена будет улучшен для реализации интерфейса NodeBacked, и тогда IDE не выдаст вам ошибок в аннотациях или где-либо еще.
Извините за путаницу. Мы собираемся решить эти проблемы в следующем выпуске.
Обновить:
Извините, я не заметил этого раньше, но концепция, которую вы поместили в elementClass, на самом деле является интерфейсом, и, поскольку она не аннотирована ни @NodeEntity, ни расширением NodeBacked, это настоящая проблема.
Я думаю, что вы также задавали вопрос на форумах Spring, вот мои предложения оттуда:
Ваша концепция является интерфейсом и не расширяет NodeBacked прямо сейчас.
В целом: интерфейс NodeBacked добавляется в классы с аннотацией @NodeEntity.
Тогда вы можете попробовать то же самое решение.
- либо аннотируйте Concept с помощью @NodeEntity.
- или заставьте Concept расширить NodeBacked на себя
Важно: elementClass должен скорее ссылаться на конкретную реализацию (хотя это может работать с интерфейсом, хотя он просто используется для проверки совместимости с целью).
Spring Data использует некоторые приемы ткачества (aspectJ) для генерации классов. Вы должны добавить какой-нибудь плагин в свой pom, например https://github.com/SpringSource/spring-data-graph-examples/blob/master/hello-worlds/pom.xml