[英]Hibernate Table is not getting created with @onetomany mapping
I have created three entity classes whose relation is defined as follows: Screen -----> has many ConfigurableRows ConfigurableRows -----> Has many Seats. 我创建了三个实体类,它们的关系定义如下:屏幕----->有很多ConfigurableRows ConfigurableRows ----->有很多席位。
When i am trying to persist the Screen Class object no table is getting creating. 当我尝试保留Screen Class对象时,没有表正在创建。
I am attaching my entity classes here. 我在这里附加我的实体类。
public class Screen {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int screenid;
private String screenName;
@OneToMany(targetEntity=ConfigurableRow.class, mappedBy="screenid", fetch=FetchType.LAZY,cascade= CascadeType.ALL)
private List<ConfigurableRow> rows;
public Screen(){
rows = new ArrayList<ConfigurableRow>(10);
}
public Screen(int rowSize){
rows = new ArrayList<ConfigurableRow>(rowSize);
}
public String getScreenName() {
return screenName;
}
public void setScreenName(String screenName) {
this.screenName = screenName;
}
public int getScreenid() {
return screenid;
}
public void setScreenid(int screenid) {
this.screenid = screenid;
}
public List<ConfigurableRow> getRows() {
return rows;
}
public void setRows(List<ConfigurableRow> rows) {
this.rows = rows;
}
} }
public class ConfigurableRow implements List<Seat>, IConfigureRow , IRow {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int rowId;
private int numberOfSeats;
private String rowName;
private String screenName;
private int screenid;
@ElementCollection
List<Seat> seats;
public ConfigurableRow(){
this.numberOfSeats = 10;
this.rowName = "Default";
this.screenName = "Default";
this.seats = new ArrayList<>(numberOfSeats);
}
public ConfigurableRow(int numberOfSeats,String screenName , String rowName){
this.numberOfSeats = numberOfSeats;
this.rowName = rowName;
this.screenName = screenName;
this.seats = new ArrayList<Seat>(numberOfSeats);
}
public int getRowId() {
return rowId;
}
@ManyToOne(targetEntity = Screen.class,fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn (name="screenid",referencedColumnName="screenid",nullable=false,unique=false)
public int getScreenid() {
return screenid;
}
public void setScreenid(int screenid) {
this.screenid = screenid;
}
public List<Seat> getSeats() {
return seats;
}
public void setSeats(List<Seat> seats) {
this.seats = seats;
}
public String getRowName() {
return rowName;
}
public String getScreenName() {
return screenName;
}
@Override
public boolean add(Seat e) {
return seats.add(e);
}
@Override
public boolean addAll(Collection<? extends Seat> c) {
if(c.size() >= numberOfSeats){
throw new IllegalArgumentException("Seat Limit Exceeds!!!!!");
}
else {
return addAll(c);
}
}
@Override
public void clear() {
seats.clear();
}
@Override
public boolean contains(Object o) {
return seats.contains(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return seats.containsAll(c);
}
@Override
public boolean isEmpty() {
return seats.isEmpty();
}
@Override
public Iterator<Seat> iterator() {
return seats.iterator();
}
@Override
public boolean remove(Object o) {
return seats.remove(o);
}
@Override
public boolean removeAll(Collection<?> c) {
return seats.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return seats.removeAll(c);
}
@Override
public int size() {
return seats.size();
}
@Override
public Object[] toArray() {
return seats.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return seats.toArray(a);
}
@Override
public boolean addSeat(Seat seat) {
if(seats.size() >= numberOfSeats){
throw new IllegalArgumentException("Seat Limit Exceeds!!!!!");
} else{
return add(seat);
}
}
@Override
public boolean addSeat(Seat seat, int seatNumber) {
if(seats.size() >= numberOfSeats){
throw new IllegalArgumentException("Seat Limit Exceeds!!!!!");
} else{
add(seatNumber,seat);
return true;
}
}
@Override
public boolean addAll(int index, Collection<? extends Seat> c) {
if(seats.size() + c.size() > numberOfSeats){
throw new IllegalArgumentException();
}
else {
return seats.addAll(index, c);
}
}
@Override
public Seat get(int index) {
return seats.get(index);
}
@Override
public Seat set(int index, Seat element) {
return seats.set(index, element);
}
@Override
public void add(int index, Seat element) {
seats.add(index, element);
}
@Override
public Seat remove(int index) {
return seats.remove(index);
}
@Override
public int indexOf(Object o) {
return seats.indexOf(o);
}
@Override
public int lastIndexOf(Object o) {
return seats.lastIndexOf(o);
}
@Override
public ListIterator<Seat> listIterator() {
return seats.listIterator();
}
@Override
public ListIterator<Seat> listIterator(int index) {
return seats.listIterator(index);
}
@Override
public List<Seat> subList(int fromIndex, int toIndex) {
return seats.subList(fromIndex, toIndex);
}
public int getNumberOfSeats() {
return numberOfSeats;
}
public void setNumberOfSeats(int numberOfSeats) {
this.numberOfSeats = numberOfSeats;
}
public List<Seat> getRowSet() {
return seats;
}
public void setRowSet(List<Seat> rowSet) {
this.seats = rowSet;
}
} }
public class Seat implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8083252956190536785L;
/*@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int seatid;*/
private int seatNumber;
private SeatType seatType;
public int getSeatNumber() {
return seatNumber;
}
public void setSeatNumber(int seatNumber) {
this.seatNumber = seatNumber;
}
public SeatType getSeatType() {
return seatType;
}
public void setSeatType(SeatType seatType) {
this.seatType = seatType;
}
} }
I am new to hibernate. 我是新来的冬眠。 Kindly let me know what I am doing wrong here.
请让我知道我在做什么错。
My Tables are getting created now . 我的表现在正在创建。 But with out any values.
但是没有任何价值。 Hence foreign key violation error is coming.
因此,即将出现外键冲突错误。
I think that is a OneToMany bidirectional relationship so in the class ConfigurableRow you have to add an object from Screen class with annotation @ManyToOne 我认为这是一个OneToMany双向关系,因此在ConfigurableRow类中,您必须从Screen类中添加一个带有@ManyToOne批注的对象
@ManyToOne
private Screen screen
i think you should put the onetomany annotation before your getrows() method. 我认为您应该将onetomany注释放在getrows()方法之前。
@OneToMany(targetEntity=ConfigurableRow.class, mappedBy="screenid", fetch=FetchType.LAZY,cascade= CascadeType.ALL) public List<ConfigurableRow> getRows() { return rows; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.