我使用的是使用Spring和Spring Data Neo4j的a new Java EE project called ACEM。
这个问题是“Layered architecture and persistence annotations on the model beans?”的后续行动,导致了两个互补的行动:
我的问题在于行动2。
目前,我拥有确实特定于SDN的存储库,例如:
package eu.ueb.acem.dao.bleu.neo4j;
import eu.ueb.acem.domain.beans.bleu.neo4j.BesoinNode;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.neo4j.repository.RelationshipOperationsRepository;
public interface BesoinRepository extends GraphRepository<BesoinNode>, RelationshipOperationsRepository<BesoinNode> {
}
如果我创建一个BesoinDAO接口来隐藏这个BesoinRepository接口,我想它应该是这样的:
package eu.ueb.acem.dao.bleu;
import eu.ueb.acem.domain.beans.bleu.Besoin;
public interface BesoinDAO {
public Besoin[] retrieveAll() throws BesoinDAOException;
public Besoin retrieve(String name) throws BesoinDAOException;
public void insert(Besoin besoin) throws BesoinDAOException;
public void update(Besoin besoin) throws BesoinDAOException;
public void delete(Besoin besoin) throws BesoinDAOException;
}
然后:
package eu.ueb.acem.dao.bleu.neo4j;
import eu.ueb.acem.dao.bleu.BesoinDAO;
import eu.ueb.acem.domain.beans.bleu.neo4j.BesoinNode;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.neo4j.repository.RelationshipOperationsRepository;
public interface BesoinRepository extends BesoinDAO, GraphRepository<BesoinNode>, RelationshipOperationsRepository<BesoinNode> {
}
不同之处在于BesoinRepository现在扩展了BesoinDAO。
问题在这里
我编写了一个在BesoinRepository上使用@Autowired的测试用例,它运行良好。但如果我试图通过BesoinDAO获取Besoin,如下所示,它就不再起作用了:
@Autowired
private BesoinDAO besoinDao;
@Test
public final void t0TestCreateBesoin() {
Besoin besoin1 = new BesoinNode("besoin1 for t0TestCreateBesoin");
Besoin besoin2 = null;
try {
besoinDao.insert(besoin1);
besoin2 = besoinDao.retrieve("besoin2 for t0TestCreateBesoin");
} catch (BesoinDAOException e) {
e.printStackTrace();
}
assertNotNull(besoin2);
}
例外是:
Tests in error:
t0TestCreateBesoin(eu.ueb.acem.repository.BesoinRepositoryTest): Error creating bean with name 'eu.ueb.acem.repository.BesoinRepositoryTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private eu.ueb.acem.dao.bleu.BesoinDAO eu.ueb.acem.repository.BesoinRepositoryTest.besoinDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'besoinRepository': FactoryBean threw exception on object creation; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property update found for type eu.ueb.acem.domain.beans.bleu.neo4j.BesoinNode
问题:是否可以在不扩展SDN的GraphRepository接口的接口上使用@Autowired?如果是这样,怎么样?
谢谢!
答案 0 :(得分:0)
接口可以自动装配,声明Spring Data Neo4j配置文件中的实现具体类,即:
<bean id="besoinDao" class="eu.ueb.acem.dao.bleu.neo4j.BesoinRepository"/>