为了账号安全,请及时绑定邮箱和手机立即绑定

JPA 连接表查询

JPA 连接表查询

白衣非少年 2022-07-27 09:37:59
我正在做一个学校项目,我在连接表格时遇到了麻烦,所以我可以使用 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;}我希望我很清楚。提前感谢大家。
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

据我了解,一个联系人可以有 N 条消息,而没有联系人就不能有消息,对吧?

由于您在类之间存在关系,因此您必须在 jpa 中使用特定的注释,例如:

消息类中,您应该使用@ManyToOne 注释,因为您有许多消息用于一个联系人。JoinColumn 将在消息表中输入contacts_id 。

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

Contacts类中,您应该使用 @OneToMany 注释,因为一个联系人有很多消息。mappedBy 在消息类的联系中进行引用。

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

到目前为止,您在联系人和消息之间进行了双向引用。现在在您的服务类中,我建议您通过联系人查找消息,因为没有联系人就无法获得消息。它是一个存储库原则。

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

顺便说一句,抱歉英语不好。


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号