2016-02-29 4 views
-1

В моем коде есть отношение oneToMany между классом customer и классом item. Это означает, что у у клиента может быть одно или несколько предметов. Вот код клиента:Java-спящий режим: @OneToMany ассоциация не работает

@Entity 
@Data 

public class customer { 

    @Id 
    @GeneratedValue 
    int id; 

    String name; 
    String lastname; 

    @Embedded 
    Address address; 

    @OneToMany 
    @Column(name="ITEM_ID") 
    List<item> item;  
} 

и это класс пункт:

@Entity 
@Data 

public class item { 

    @Id 
    @GeneratedValue 
    int id; 

    String name; 
    String Serialnumber; 
    int price; 

    @ManyToOne 
    customer customer; 

} 

Тогда я сделал несколько тестов, чтобы попробовать свои запросы в моделях.

insert into item(id,name,Serialnumber,price) values(1,'bike','123',200); 
insert into item(id,name,Serialnumber,price) values(2,'car','123',200); 


insert into customer(id,name,lastname,Country,City,Street,No,item_id) 
values(1,'Salman','Lashkarara','Iran','Tehran','Shariati','12',1); 

insert into customer(id,name,lastname,Country,City,Street,No,item_id) 
values(2,'Saba','Lashkarara','Iran','Tehran','Shariati','12',2); 


insert into customer(id,name,lastname,Country,City,Street,No,item_id) 
values(3,'Saba','Lashkarara','Iran','Tehran','Shariati','12',1); 

Но когда я запускаю мой код, я столкнуться со следующей ошибкой:

Column "ITEM_ID" not found; SQL statement: 
insert into customer(id,name,lastname,Country,City,Street,No,item_id) values(1,'Salman','Lashkarara','Iran','Tehran','Shariati','12',1) 

Пожалуйста, обратите особое внимание, что это java mvc-spring приложение и я создаю свои модели с помощью кода, так нет базы данных для проверки поля item_id.

Как вы можете видеть, я уже добавил @Column(name="ITEM_ID") для определения столбца.

+0

Для меня это не имеет смысла. Клиент может иметь несколько элементов. Поэтому невозможно, чтобы ссылка (ссылки) на элементы находилась в таблице клиентов. Отображаемое вами сопоставление, скорее всего, создало таблицу отображения n: m между клиентом и элементом. Если вы используете атрибут mappedBy, чем ссылка может быть в таблице элементов (в качестве ссылки на клиента) –

ответ

1

Вы должны использовать @JoinColumn для объединения столбцов:

@OneToMany 
@JoinColumn(name="ITEM_ID") 
List<item> item; 
+0

Какая новая ошибка? –

+0

Это та же ошибка. – Salman

+0

Если я прав, то Item_id colum есть, чем в таблице элементов, и вы пытаетесь вставить его в таблицу клиентов. –

0

некоторые другие варианты

@OneToMany(cascade=CascadeType.All, fetch=FetchType.EAGER) 
@JoinColumn(name="ITEM_ID") 
List<item> item; 

в классе Item

@ManyToOne(mappedBy="item") 
customer customer; 
0

вы могли бы сделать это я также user класс и bcr класс, у одного пользователя есть много bcr, поэтому ниже код поможет вам

bcr.java

@ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "user_who_enter_demand", nullable = false) 
    public User getUserByUserWhoEnterDemand() { 
    return this.userByUserWhoEnterDemand; 
    } 

    public void setUserByUserWhoEnterDemand(User userByUserWhoEnterDemand) { 
    this.userByUserWhoEnterDemand = userByUserWhoEnterDemand; 
    } 

user.java

@OneToMany(fetch = FetchType.LAZY, mappedBy = "userByUserWhoEnterDemand") 
    public Set<BudgetControlRegister> getBudgetControlRegistersForUserWhoEnterDemand() { 
    return this.budgetControlRegistersForUserWhoEnterDemand; 
    } 

    public void setBudgetControlRegistersForUserWhoEnterDemand(Set<BudgetControlRegister> budgetControlRegistersForUserWhoEnterDemand) { 
    this.budgetControlRegistersForUserWhoEnterDemand = budgetControlRegistersForUserWhoEnterDemand; 
    } 
0

Вы не можете отобразить столбец таблицы без таблицы:

@Entity 
@Table(name = "ITEM_TABLE") 
public class item { 
... 
@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name = "CUSTOMER_ID_ITEM_TABLE") 
private customer customer; 
... 
} 

@Entity 
@Table(name = "CUSTOMER_TABLE") 
public class customer { 
... 
    @OneToMany 
    @Column(name="ITEM_ID") 
    List<item> item;  
} 
Смежные вопросы