hibernate注解配置单向一对多(配置在一的一方)并且一的一方为联合主键,这个该怎么配置,最好是写一个demo
如下是一个“酒店房间信息表”,以hotelRoomId和hotelId为联合主键。其中配置了“一对多”和“多对一”
package cn.ssms.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="hotelRoom")
public class HotelRoom{
private int hotelRoomId; //客房编号
private String hotelRoomName; //房间名称
private String hotelRoomImage; //客房图片
private Hotel hotel; //属于哪个酒店
private Set<HotelOrder> hotelOrderSet = new HashSet<HotelOrder>(); //相关的酒店订单的集合
private Set<HotelRoomDate> hotelRoomDateSet = new HashSet<HotelRoomDate>(); //房间不同日期信息的集合
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="hotelRoomId")
public int getHotelRoomId() {
return hotelRoomId;
}
public void setHotelRoomId(int hotelRoomId) {
this.hotelRoomId = hotelRoomId;
}
@Column(name="hotelRoomImage")
public String getHotelRoomImage() {
return hotelRoomImage;
}
public void setHotelRoomImage(String hotelRoomImage) {
this.hotelRoomImage = hotelRoomImage;
}
@Column(name="hotelRoomName")
public String getHotelRoomName() {
return hotelRoomName;
}
public void setHotelRoomName(String hotelRoomName) {
this.hotelRoomName = hotelRoomName;
}
@ManyToOne(fetch=FetchType.LAZY,targetEntity=Hotel.class)
@JoinColumn(name="hotelId")
public Hotel getHotel() {
return hotel;
}
public void setHotel(Hotel hotel) {
this.hotel = hotel;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="hotelRoom")
public Set<HotelOrder> getHotelOrderSet() {
return hotelOrderSet;
}
public void setHotelOrderSet(Set<HotelOrder> hotelOrderSet) {
this.hotelOrderSet = hotelOrderSet;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="hotelRoom")
public Set<HotelRoomDate> getHotelRoomDateSet() {
return hotelRoomDateSet;
}
public void setHotelRoomDateSet(Set<HotelRoomDate> hotelRoomDateSet) {
this.hotelRoomDateSet = hotelRoomDateSet;
}
}
有疑问请回复。欢迎采纳,谢谢!
另一种情况
下面是“用户酒店收藏信息表”,以userId和hotelId为联合主键
package model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="user_hotel_collect")
public class UserHotelCollect implements Serializable{
private static final long serialVersionUID = 1L;
private User user; //是哪个用户收藏的
private Hotel hotel; //收藏的是哪个酒店
@Id
@ManyToOne(fetch=FetchType.LAZY,targetEntity=User.class)
@JoinColumn(name="userId")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Id
@ManyToOne(fetch=FetchType.LAZY,targetEntity=Hotel.class)
@JoinColumn(name="hotelId")
public Hotel getHotel() {
return hotel;
}
public void setHotel(Hotel hotel) {
this.hotel = hotel;
}
}
有疑问请回复。欢迎采纳,谢谢!
按照你给我发的,我给你写的demo,你试下。大致就是这样,我之前写过这种
package model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="user")
public class UserDemo {
private String userName; //用户名
private String email; //邮箱
private Set<Card> cardSet = new HashSet<Card>();
@Id
@JoinColumn(name="userName")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Id
@JoinColumn(name="email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinTable(name="name_address",
joinColumns={@JoinColumn(name="username",referencedColumnName="userName")},
inverseJoinColumns={@JoinColumn(name="email",referencedColumnName="email")})
public Set<Card> getCardSet() {
return cardSet;
}
public void setCardSet(Set<Card> cardSet) {
this.cardSet = cardSet;
}
}
自己百度,自己报读,字啊hiin成都农村调查
package cn.ssms.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="hotelRoom")
public class HotelRoom{
private int hotelRoomId; //客房编号
private String hotelRoomName; //房间名称
private String hotelRoomImage; //客房图片
private Hotel hotel; //属于哪个酒店
private Set<HotelOrder> hotelOrderSet = new HashSet<HotelOrder>(); //相关的酒店订单的集合
private Set<HotelRoomDate> hotelRoomDateSet = new HashSet<HotelRoomDate>(); //房间不同日期信息的集合
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="hotelRoomId")
public int getHotelRoomId() {
return hotelRoomId;
}
public void setHotelRoomId(int hotelRoomId) {
this.hotelRoomId = hotelRoomId;
}
@Column(name="hotelRoomImage")
public String getHotelRoomImage() {
return hotelRoomImage;
}
public void setHotelRoomImage(String hotelRoomImage) {
this.hotelRoomImage = hotelRoomImage;
}
@Column(name="hotelRoomName")
public String getHotelRoomName() {
return hotelRoomName;
}
public void setHotelRoomName(String hotelRoomName) {
this.hotelRoomName = hotelRoomName;
}
@ManyToOne(fetch=FetchType.LAZY,targetEntity=Hotel.class)
@JoinColumn(name="hotelId")
public Hotel getHotel() {
return hotel;
}
public void setHotel(Hotel hotel) {
this.hotel = hotel;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="hotelRoom")
public Set<HotelOrder> getHotelOrderSet() {
return hotelOrderSet;
}
public void setHotelOrderSet(Set<HotelOrder> hotelOrderSet) {
this.hotelOrderSet = hotelOrderSet;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="hotelRoom")
public Set<HotelRoomDate> getHotelRoomDateSet() {
return hotelRoomDateSet;
}
public void setHotelRoomDateSet(Set<HotelRoomDate> hotelRoomDateSet) {
this.hotelRoomDateSet = hotelRoomDateSet;
}
}
package model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="user")
public class UserDemo {
private String userName; //用户名
private String email; //邮箱
private Set cardSet = new HashSet();
@Id
@JoinColumn(name="userName")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Id
@JoinColumn(name="email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinTable(name="name_address",
joinColumns={@JoinColumn(name="username",referencedColumnName="userName")},
inverseJoinColumns={@JoinColumn(name="email",referencedColumnName="email")})
public Set<Card> getCardSet() {
return cardSet;
}
public void setCardSet(Set<Card> cardSet) {
this.cardSet = cardSet;
}
}
你可以试试这两种,不知道有没有帮助到你