Hibernate实体定义

Hibernate实体定义,hibernate,jpa,spring-boot,Hibernate,Jpa,Spring Boot,我刚开始冬眠。我正在用JPA Hibernate在spring boot中设计一个应用程序 我的数据库架构为: CREATE TABLE IF NOT EXISTS `offers` ( `id` int(11) NOT NULL, `detail` varchar(255) NOT NULL `status` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `restaurants`

我刚开始冬眠。我正在用JPA Hibernate在spring boot中设计一个应用程序

我的数据库架构为:

CREATE TABLE IF NOT EXISTS `offers` (
`id` int(11) NOT NULL,
  `detail` varchar(255) NOT NULL
 `status` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `restaurants` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `status` varchar(255) NOT NULL
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `rest_offer_map` (
 `id` int(11) NOT NULL,
 `rest_id` int(11) NOT NULL,
 `offer_id` int(11) NOT NULL
 `status` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我想模式是清楚的。现在的情况可能是,一家餐馆没有任何报价。如何创建实体以便实现左连接。 此外,每个表中都有一个名为status的列,需要注意它(特别是在左连接中,因为在这种情况下,status将是一个连接条件)


我想要的o/p是所有提供优惠的餐厅的列表(在任何情况下),因此需要左连接。

您需要创建餐厅实体作为关系的拥有方,如下所示

@Entity
@Table(name="restaurants")
public class Restaurant implements Serializable{
@Id
@Column(name="id")
private Long id;
@ManyToMany
@JoinTable(name="rest_offer_map",joinColumns=@JoinColumn(name="rest_id", referencedColumnName="id"),              inverseJoinColumns=@JoinColumn(name="offer_id",referencedColumnName="id"))
private Collection<Offer> offers;
        .....

}
@实体
@表(name=“餐厅”)
公共类餐厅实现可序列化{
@身份证
@列(name=“id”)
私人长id;
@许多
@JoinTable(name=“rest\u offer\u map”,joinColumns=@JoinColumn(name=“rest\u id”,referencedColumnName=“id”),inverseJoinColumns=@JoinColumn(name=“offer\u id”,referencedColumnName=“id”))
私人收藏优惠;
.....
}
以及要约实体,如下所示

@Entity
@Table(name"offers")
public class Offer implements Serializable{
     @Id
     @Column(name="id")
     private Long id;
     ManyToMany(mappedBy="offers")
     private Collection<Restaurant> restaurants;
......
}
@实体
@表(名称为“报价”)
公共类提供实现了可序列化{
@身份证
@列(name=“id”)
私人长id;
许多(mappedBy=“提供”)
私人收藏餐厅;
......
}

您需要创建餐厅实体作为关系的拥有方,如下所示

@Entity
@Table(name="restaurants")
public class Restaurant implements Serializable{
@Id
@Column(name="id")
private Long id;
@ManyToMany
@JoinTable(name="rest_offer_map",joinColumns=@JoinColumn(name="rest_id", referencedColumnName="id"),              inverseJoinColumns=@JoinColumn(name="offer_id",referencedColumnName="id"))
private Collection<Offer> offers;
        .....

}
@实体
@表(name=“餐厅”)
公共类餐厅实现可序列化{
@身份证
@列(name=“id”)
私人长id;
@许多
@JoinTable(name=“rest\u offer\u map”,joinColumns=@JoinColumn(name=“rest\u id”,referencedColumnName=“id”),inverseJoinColumns=@JoinColumn(name=“offer\u id”,referencedColumnName=“id”))
私人收藏优惠;
.....
}
以及要约实体,如下所示

@Entity
@Table(name"offers")
public class Offer implements Serializable{
     @Id
     @Column(name="id")
     private Long id;
     ManyToMany(mappedBy="offers")
     private Collection<Restaurant> restaurants;
......
}
@实体
@表(名称为“报价”)
公共类提供实现了可序列化{
@身份证
@列(name=“id”)
私人长id;
许多(mappedBy=“提供”)
私人收藏餐厅;
......
}

referencedColumnName来自tables restaurants或rest\u order\u mapping?referencedColumnName来自restaurant和offers表。rest\u order\u mapping表是一个联接表,包含对restaurants和offers表的引用外键。因此,restaurants表中的id列和offers表中的id列是
referencedColumnName
s关于rest\u order\u映射表。100喜欢回答!!干杯还有一个问题。当我添加许多(mappedBy=“offers”)私人收藏餐厅时;这样,当我得到其余的对象时,它会给出无限循环。as Offers对象位于Rest对象内部,Rest对象位于Offers内部。我遗漏了什么这是一种双向关系。餐厅有它的报价集合,每个报价都有它的报价所在的餐厅集合。您需要在报价实体上用@XmlTransient@Transient工作,但当我试图打印所有餐厅时,情况就是这样,所以我得到这个o/p,{“id”:2,“name”:“rest2”,“offer”:[{“id”:1,“detail”:“offer 1”,“restaurants”:null}]},但我要打印的是offers实体,这意味着我有一个要求,即我必须打印一个带有填充餐厅的特定订单对象。因为是暂时的,,它不会持久存在。?referencedColumnName来自tables restaurants或来自rest\u order\u mapping?referencedColumnName来自restaurant和offers表。rest\u order\u mapping表是一个联接表,包含对restaurants和offers表的引用外键。因此,restaurants表中的id列和offers表中的id列是
referencedColumnName
s关于rest\u order\u映射表。100喜欢回答!!干杯还有一个问题。当我添加许多(mappedBy=“offers”)私人收藏餐厅时;这样,当我得到其余的对象时,它会给出无限循环。as Offers对象位于Rest对象内部,Rest对象位于Offers内部。我遗漏了什么这是一种双向关系。餐厅有它的报价集合,每个报价都有它的报价所在的餐厅集合。您需要在报价实体上用@XmlTransient@Transient工作,但当我试图打印所有餐厅时,情况就是这样,所以我得到这个o/p,{“id”:2,“name”:“rest2”,“offer”:[{“id”:1,“detail”:“offer 1”,“restaurants”:null}]},但我要打印的是offers实体,这意味着我有一个要求,即我必须打印一个带有填充餐厅的特定订单对象。因为它是暂时的,所以不会持续。?