简体   繁体   English

不能使用@onetomany映射创建Hibernate Table

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM