我是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是带有优惠的所有餐厅的列表(在任何一个),所以需要左连接。
答案 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;
......
}