我正在开发一个spring boot应用程序,我在这里遇到了一个问题。我想为我的RepositoryImpl,RepositoryCustom和Repository类提供单独的包,但是当我分离包时我得到了这个错误:
引起: org.springframework.data.mapping.PropertyReferenceException:没有 找到类型Demo的属性customMethod!
只有当我将RepositoryImpl,RepositoryCustom和Repository类放入同一个包中时,它才有效。我已经尝试了@EnableJpaRepositories("com.example.demo.persist")
但仍然没有工作。
有没有办法实现这个目标?
这是我的代码:
DemoApplication.java
@SpringBootApplication
@EnableJpaRepositories("com.example.demo.persist")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
DemoController.java
@RestController
public class DemoController {
@Autowired
DemoService demoService;
@RequestMapping("/test")
public String getUnidades() {
demoService.customMethod();
return "test";
}
}
DemoRepositoryCustom.java
public interface DemoRepositoryCustom {
void customMethod();
}
DemoRepositoryImpl.java
public class DemoRepositoryImpl implements DemoRepositoryCustom {
@Override
public void customMethod() {
// do something
}
}
DemoRepositoryCustom.java
public interface DemoRepository extends JpaRepository<Demo, Long>, DemoRepositoryCustom {
}
Demo.java
@Entity
public class Demo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", columnDefinition = "bigint")
private int id;
@NotEmpty
@Column(name = "name", columnDefinition = "VARCHAR(60)", length = 60, unique = false, nullable = false)
private String name;
// ...
DemoService.java
@Service
@Transactional
public class DemoService {
@Autowired
DemoRepository demoRepository;
public void customMethod() {
demoRepository.customMethod();
}
}
application.properties
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.datasource.url=jdbc:mysql://localhost:3306/demo?createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
答案 0 :(得分:1)
自定义实现的自动检测仅适用于声明存储库的程序包之下的程序包。
但是,您可以使您的实现成为名称与所需类名匹配的bean。
在你的情况下,这将是demoRepositoryImpl
。
答案 1 :(得分:1)
实际上您的包层次结构的顺序不正确。
像这样:
com.example.demo.repository
com.example.demo.repository.custom
com.example.demo.repository.custom.impl
它会起作用。