JoinColumn Hibernate / API - PullRequest
       28

JoinColumn Hibernate / API

0 голосов
/ 14 февраля 2020

У меня следующая проблема: я хочу просто объединить таблицы Markets (основной) и Telephones, но я сталкиваюсь с некоторыми проблемами, когда делаю это с аннотациями.

Я просто хочу использовать Comercio.id в качестве соответствующего внешнего ключа от Telefone.fk_id, но он его не распознает. Я также хотел бы спросить, нужно ли создавать интерфейс репозитория для обоих классов.

РЕДАКТИРОВАТЬ. Кроме того, как бы выглядел запрос POST для такого примера?

Comercio. java

@Entity
@Table(name = "comercio")
public class Comercio {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String cnpj;
    private String endereco;

    @OneToMany(targetEntity = Telefone.class , mappedBy = "comercio", fetch = FetchType.LAZY)
    private List<Telefone> telefones;
    private String email;

Телефон. java

@Entity
@Table(name = "telefone")
public class Telefone {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long telefone_id;

    @ManyToOne
    @JoinColumn(name="fk_id", referencedColumnName = "id")
    private Comercio comercio;
    private String telefone;

Ответ I get:

{
      "nome" : "Americanas",
      "cnpj" : "000",
      "endereco" : "SQN 112",
      "telefones" : [ ],
      "email" : "contato@americanas.com",
      "comercio_id" : 1
}

Консоль:

Hibernate: select comercio0_.id as id1_0_, comercio0_.cnpj as cnpj2_0_, comercio0_.email as email3_0_, comercio0_.endereco as endereco4_0_, comercio0_.nome as nome5_0_ from comercio comercio0_
Hibernate: select telefones0_.fk_id as fk_id3_1_0_, telefones0_.telefone_id as telefone1_1_0_, telefones0_.telefone_id as telefone1_1_1_, telefones0_.fk_id as fk_id3_1_1_, telefones0_.telefone as telefone2_1_1_ from telefone telefones0_ where telefones0_.fk_id=**?**

Оцените любую помощь.

1 Ответ

0 голосов
/ 15 февраля 2020

Я бы предположил, что телефон не является сущностью в отдельности: вам никогда не захочется запрашивать телефон, и он существует только как часть Comercio.

Тогда это может быть Embeddable однако, вместо сущности, поскольку у нее есть только одно свойство - число, - вы можете упростить до приведенного ниже и сопоставить его как коллекцию строк. Тогда нет необходимости в Telefone классе.

@Entity
@Table(name = "comercio")
public class Comercio {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String cnpj;
    private String endereco;

    @ELementCollection
    @CollectionTable(name = "comercio_telefone", 
                joinColumns=@JoinColumn(name="comercio_id"))
    private List<String> telefones;

    private String email;
}
...