Consulta de tabelas de junção JPA

Vukasin Kosanovic

Estou trabalhando em um projeto escolar e estou tendo problemas para juntar tabelas para que possa exibir a saída em arquivo JSP usando JSTL. Fornecerei todo o código necessário. Eu sei que preciso conectar entidades de alguma forma, mas não sei como.

SQL:

CREATE TABLE IF NOT EXISTS `totelegram`.`contacts` (
`id` INT NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
`last_name` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
`phone_number` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC),
UNIQUE INDEX `phone_number_UNIQUE` (`phone_number` ASC))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `totelegram`.`messages` (
`id_message` INT NOT NULL AUTO_INCREMENT,
`message` VARCHAR(2000) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT 
NULL,
`time` VARCHAR(45) NOT NULL,
`contacts_id` INT NOT NULL,
 PRIMARY KEY (`id_message`),
 UNIQUE INDEX `id_message_UNIQUE` (`id_message` ASC),
 INDEX `fk_messages_contacts_idx` (`contacts_id` ASC),
 CONSTRAINT `fk_messages_contacts`
 FOREIGN KEY (`contacts_id`)
 REFERENCES `totelegram`.`contacts` (`id`)
 ON DELETE NO ACTION
 ON UPDATE NO ACTION)
 ENGINE = InnoDB;

Contacts.java

@Entity(name = "contacts")
public class Contacts implements Serializable{

private static final long serialVersionUID = 1L;

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

@javax.persistence.Column(name = "first_name")
private String firstName;

@javax.persistence.Column(name = "last_name")
private String lastName;

@javax.persistence.Column(name = "phone_number")
private String phoneNumber;

...getters/setters, constructor, toString...

Messages.java

@Entity(name = "messages")
public class Messages implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@javax.persistence.Column(name = "id_message")
private int id;

private String message;

private String time;

@javax.persistence.Column(name = "contacts_id")
private int contactsId;

...getters/setters, constructor, toString...

MessagesRepository.java

public interface MessagesRepository extends JpaRepository<Messages, Integer> {

//custom query which will output this
//SELECT b.message, b.time, b.contacts_id, a.first_name, a.last_name FROM messages AS b INNER JOIN contacts as A ON (b.contacts_id=a.id) ORDER BY time ASC;
public List<Messages> findAll(); 

}

Espero ter sido claro. Obrigado a todos antecipadamente.

Guilherme Stella

Pelo que entendi, um contato pode ter N mensagens e você não pode ter uma Mensagem sem o contato, certo?

Uma vez que você tem relações entre classes, você deve usar anotações específicas em jpa, por exemplo:

na classe da mensagem , você deve usar a anotação @ManyToOne, pois você tem muitas mensagens para um contato. O JoinColumn irá inserir o contacts_id na Tabela de Mensagens.

@ManyToOne @JoinColumn(name = "contacts_id") private Contacts contact;

na classe de contatos , você deve usar a anotação @OneToMany, uma vez que um contato tem muitas mensagens. O mappedBy faz referência em contato na classe Message.

@OneToMany(mappedBy = "contact") private List<Messages> messages = new ArrayList<>();

Até agora, você fez uma referência bidirecional entre Contatos e Mensagens. Agora em sua classe de serviço, eu recomendo que você encontre as Mensagens através dos Contatos, já que você não pode ter uma mensagem sem o contato. É um princípio do Repositório.

Contacts con = repository.findOne(1); con.getMessages();

btw, desculpe pelo inglês ruim.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Consulta de junção no Spring Data JPA

Dados de tabelas de junção de consulta SQL

Como entender a consulta de junção de quatro tabelas

Consulta de junção de várias tabelas SQL

MySQL Atualizar consulta de tabelas de junção interna

Otimize a consulta de junção de várias tabelas

SQL - Consulta de junção de 3 tabelas

Consulta de tabelas de junção com SqlKata

Tabelas de junção de SQL usando Spring JPA

Consulta lenta junção interna de muitas tabelas HSQLDB

consulta mysql de 2 tabelas com junção interna

Junção interna de várias tabelas na consulta mysql

Sintaxe para consulta de junção interna para 4 tabelas

Consulta de junção interna com duas tabelas

MYSQL consulta de tabelas múltiplas usando junção

Consulta de junção de critérios JPA

Consulta de junção de critérios JPA

Especificando nomes de tabelas e campos para tabelas de junção em Spring Boot / Hibernate / JPA

Especificando nomes de tabelas e campos para tabelas de junção em Spring Boot / Hibernate / JPA

Consulta de consulta de junção do Magento usando 3 tabelas

MySQL - tabelas de junção

Junção interna de consulta Kotlin JPA usando dois tipos

repositório de junção e consulta spring jpa

Consulta de junção de três tabelas não mostrando nenhum dado

Consulta de exclusão inconsistente com junção à esquerda de várias tabelas

Confusão de consulta de junção à esquerda com duas tabelas

Consulta de junção SQL para uma visão com soma de colunas em 3 tabelas

Visão Mysql com resultados de junção de várias tabelas em consulta lenta

Consulta de junção de banco de dados com três tabelas