【发布时间】:2023-03-17 20:48:02
【问题描述】:
我在 Restaurant 和 Tag 之间建立了多对多的关系。这是我的实体:
public class Restaurant {
@Id
@GeneratedValue
private int id;
(...)
@ManyToMany
@JoinTable(name="restaurant_tag",
joinColumns={@JoinColumn(name="restaurant_id")},
inverseJoinColumns={@JoinColumn(name="tag_id")})
private List<Tag> tags;
还有:
public class Tag {
@Id
private int id;
private String name;
@ManyToMany
@JoinTable(name="restaurant_tag",
joinColumns={@JoinColumn(name="tag_id")},
inverseJoinColumns={@JoinColumn(name="restaurant_id")})
private List<Restaurant> restaurants;
在我的控制器中(添加)我得到了:
public ModelAndView myrestaurantadd(HttpServletRequest request,
HttpServletResponse response, Restaurant restaurant, String[] tags) throws Exception {
for(String tag : tags){
Tag x = new Tag();
x.setName(tag);
restaurant.getTags().add(x);
}
在我的jsp中:
<form:form action="myrestaurantadd.htm" modelAttribute="restaurant" commandName="restaurant">
(...)
<form:select path="tags" multiple="true" items="${tagList}" itemLabel="name" itemValue="id"/>
一切正常,我的标签有多个选择,但是当我点击“保存”时,我收到了这个错误:
> org.springframework.web.util.NestedServletException:
> Request processing failed; nested
> exception is
> org.springframework.beans.BeanInstantiationException:
> Could not instantiate bean class
> [[Ljava.lang.String;]: No default
> constructor found; nested exception is
> java.lang.NoSuchMethodException:
> [Ljava.lang.String;.<init>()
【问题讨论】:
-
与您的错误无关,但您的映射错误:其中一个关联必须使用 @ManyToMany(mappedBy="...") 与另一个相反。见docs.jboss.org/hibernate/stable/annotations/reference/en/…。此外,始终初始化关联的双方(即添加 x.getRestaurants().add(restaurant))
标签: hibernate spring-mvc many-to-many