Я пытался разработать Spring-сервер с использованием JPA, и у меня возникли проблемы с использованием отношений «многие ко многим». Это мои сущности:
@Entity
public class Item {
@Id
private Integer id;
private String name;
private Float price;
private Integer weight;
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name="itemingredient",
joinColumns = @JoinColumn(name="iditem"),
inverseJoinColumns = @JoinColumn(name="idingredient"))
private List<Ingredient> ingredients=new ArrayList<>();
public Item( String name, Float price, Integer weight, Ingredient... ingredients) {
//this.id = id;
this.name = name;
this.price = price;
this.weight = weight;
this.ingredients = Stream.of(ingredients).collect(Collectors.toList());
this.ingredients.forEach(x->x.getItems().add(this));
}
public Item() {
}
и
@Entity
public class Ingredient {
@Id
private Integer id;
private String name;
private Float proteins;
private Float lipids;
private Float carbohydrates;
private Float energeticValue;
@ManyToMany(mappedBy = "ingredients")
@JsonIgnore
private List<Item> items=new ArrayList<>();
public Ingredient(String name, Float proteins, Float lipids, Float carbohydrates, Float energeticValue) {
//this.id = id;
this.name = name;
this.proteins = proteins;
this.lipids = lipids;
this.carbohydrates = carbohydrates;
this.energeticValue = energeticValue;
}
public Ingredient(){
}
Я создал репозитории и остальные контроллеры. Я использую MySQL для моей базы данных. Я уже создал таблицы, и у меня есть таблица "itemingredient" для отношений. Вот моя конфигурация JPA:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "Repository")
public class JPAConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("model");
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/nha");
dataSource.setUsername( "root" );
dataSource.setPassword( "1234" );
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(
EntityManagerFactory emf){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "update");
properties.setProperty(
"hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
return properties;
}
}
Это мой контроллер покоя:
@RestController
@RequestMapping(path="/items")
public class ItemController {
@Autowired
private ItemService itemService;
@RequestMapping(value = "/all",method= RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Item>> findAll(){
return new ResponseEntity<>(itemService.findAll(),null, HttpStatus.OK);
}
После запуска сервера и попытки извлечь все элементы, сервер отправляет обратно пустой список. Я не подключаюсь к своей базе данных должным образом? Спасибо!