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.
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.
deixe-me dizer algumas palavras