猿问

JPA 连接表查询

我正在做一个学校项目,我在连接表格时遇到了麻烦,所以我可以使用 JSTL 在 JSP 文件中显示输出。我将提供所有必要的代码。我知道我需要以某种方式连接实体,但我不知道如何。


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;

}

我希望我很清楚。提前感谢大家。


白衣非少年
浏览 115回答 1
1回答

繁花不似锦

据我了解,一个联系人可以有 N 条消息,而没有联系人就不能有消息,对吧?由于您在类之间存在关系,因此您必须在 jpa 中使用特定的注释,例如:在消息类中,您应该使用@ManyToOne 注释,因为您有许多消息用于一个联系人。JoinColumn 将在消息表中输入contacts_id 。@ManyToOne &nbsp; &nbsp;@JoinColumn(name = "contacts_id") &nbsp; &nbsp;private Contacts contact;在Contacts类中,您应该使用 @OneToMany 注释,因为一个联系人有很多消息。mappedBy 在消息类的联系中进行引用。@OneToMany(mappedBy = "contact") &nbsp;private List<Messages> messages = new ArrayList<>();到目前为止,您在联系人和消息之间进行了双向引用。现在在您的服务类中,我建议您通过联系人查找消息,因为没有联系人就无法获得消息。它是一个存储库原则。Contacts con = repository.findOne(1); con.getMessages();顺便说一句,抱歉英语不好。
随时随地看视频慕课网APP

相关分类

Java
我要回答