Hibernate实体定义

时间:2017-03-24 08:18:12

标签: hibernate jpa spring-boot

我是hibernate的新手。我正在使用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的列,需要注意它(特别是在左连接中,因为在这种情况下状态将是一个连接条件)

我想要的o / p是带有优惠的所有餐厅的列表(在任何一个),所以需要左连接。

1 个答案:

答案 0 :(得分:2)

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

@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;
        .....

}

以及要约实体如下

@Entity
@Table(name"offers")
public class Offer implements Serializable{
     @Id
     @Column(name="id")
     private Long id;
     ManyToMany(mappedBy="offers")
     private Collection<Restaurant> restaurants;
......
}