Spring JPA с H2: добавление еще одного объекта с внешним ключом - PullRequest
0 голосов
/ 09 марта 2019

У меня есть две сущности Статья и Статья Описание

@Entity
public class Article {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int articleId;

    private String name;
    private String manufactor;
    private float price;

    @ManyToOne
    private ArticleDescription articleDescription;


@Entity
public class ArticleDescription {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int articleDescriptionId;

    private String text;
    private String author;

    // Joshua
    @ManyToOne
    private Article article;

Я хочу что-то вроде этого:

[
 {
   "articleId": "5",
   "manufactor": "Test",
   "name": "Name",
   "price": "50",
   "ArticleDescription": {
     "articleDescriptionId": "5",
     "test": "Text",
     "author": "Author"
 }
]

У меня также есть ArticleJpaRepository и ArticleController:

public interface ArticleJpaRepository extends JpaRepository<Article, Integer> {
    List<Article> findByName(String name);

    List<Article> findByManufactor(String manufactor);

    List<Article> findByPrice(float price);
}

@ComponentScan
@RestController
public class ArticleController {

    @Autowired
    private ArticleJpaRepository articleJpaRepository;

    @GetMapping("/articles")
    @ResponseBody
    public List<Article> getArticles() {

        return articleJpaRepository.findAll();
    }

    // Optional, falls kein Customer gefunden wird.
    @RequestMapping("/article/{articleId}")
    @ResponseBody
    public Optional<Article> getArticle(@PathVariable("articleId") int articleId) {

        return articleJpaRepository.findById(articleId);
    }

    // Client to Server
    // POST über z.B. Postman Client
    @PostMapping("/article")
    public Article addArticle(@RequestBody Article article) {

        articleJpaRepository.save(article);

        return article;
    }

    @DeleteMapping("/article/{articleId}")
    public String deleteArticle(@PathVariable int articleId) {

        Article a = articleJpaRepository.getOne(articleId);
        articleJpaRepository.delete(a);

        return "deleted";
    }

    @PutMapping("/customer")
    public Article updateArticle(@RequestBody Article article) {

        articleJpaRepository.save(article);

        return article;
    }

Я ожидаю, что когда я добавлю articleDescriptionId к статье в SQL, к которой они подключатся. Но я не знаю, где я настраиваю это поведение. Когда я хочу добавить внешний ключ article_description в статью, я получаю сообщение об ошибке.

"Referential integrity constraint violation: 

Оператор SQL:

INSERT INTO article (article_Id, manufactor, name, price, ARTICLE_DESCRIPTION_ARTICLE_DESCRIPTION_ID)
VALUES ('1000', 'koezocakbasi', 'Dürüm', '4.90', '1000'),
       ('1001', 'koezocakbasi', 'Döner', '4.50', '1001'),
       ('1002', 'koezocakbasi', 'DönerTeller', '10.90', '1002');

INSERT INTO article_description (article_Description_Id, author, text)
VALUES ('1000', 'koezocakbasi', 'Dürüm'),
       ('1001', 'koezocakbasi', 'Döner'),
       ('1002', 'koezocakbasi', 'DönerTeller');
...