0
我試圖在下面運行嵌套的c:loop
。在頁面加載之前,我得到一個列表itemsextrascat
與itemsextrascatService.getExtrascatByIditems(item)
的對象。這裏沒問題,我得到了正確的結果數量。但是,嵌套循環顯示不正確。不知道它是一個休眠問題還是jstl。HIbernate - 多對多 - 嵌套c:foreach
JSP
<c:forEach var="itemsextrascat" items="${itemsextrascat}">
<th><c:out value="${itemsextrascat.extrascat.name}"></c:out> </th><br>
<table>
<c:forEach var="extras" items="${itemsextrascat.extrascat.extras}">
<tr><c:out value="${extras.name}"></c:out></tr>
</c:forEach>
</table>
</c:forEach>
返回
Fruit
Overy Easy
Syrups
Over Medium
Breakfast Additions
Sunny Side Up
所以分類標題是正確的,但是演員是:1)不正確的項目和extrascat和2),他們是不是所有列出所有演員在類別下。很確定它的hibernate是如何調用這個對象的,但我不知所措。
Extrascat.java
@Entity
@Table(name = "extrascat")
public class Extrascat implements Serializable {
private static final long serialVersionUID = 8644201177004602944L;
@Id
private int idextrascat;
private String name;
@ManyToMany(cascade = { CascadeType.ALL }, mappedBy = "extrascat")
private Set<Items> items = new HashSet<Items>();
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "idextras")
private Set<Extras> extras;
// CONSTRUCTORS
public Extrascat() {
}
public Extrascat(int idextrascat, String name, Set<Items> items, Set<Extras> extras) {
this.idextrascat = idextrascat;
this.name = name;
this.items = items;
this.extras = extras;
}
// GETTERS AND SETTERS
public int getIdextrascat() {
return idextrascat;
}
public void setIdextrascat(int idextrascat) {
this.idextrascat = idextrascat;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Items> getItems() {
return items;
}
public void setItems(Set<Items> items) {
this.items = items;
}
public Set<Extras> getExtras() {
return extras;
}
public void setExtras(Set<Extras> extras) {
this.extras = extras;
}
}
Items.java
@Entity
@Table(name = "items")
public class Items implements Serializable {
private static final long serialVersionUID = -3607451001182083512L;
@Id
@GeneratedValue
private int iditems;
@ManyToOne
@JoinColumn(name = "idcategories")
private Categories categories;
@Size(min = 1, max = 35, groups = { PersistenceValidationGroup.class,
FormValidationGroup.class })
private String name;
@Size(min = 0, max = 100, groups = { PersistenceValidationGroup.class,
FormValidationGroup.class })
private String description;
private double priceInCents;
private int hidden;
@OrderColumn
@ManyToMany(cascade = {CascadeType.REMOVE}, fetch = FetchType.LAZY)
@JoinTable(name="itemsextrascat", joinColumns={@JoinColumn(name="iditems")},
inverseJoinColumns={@JoinColumn(name="idextrascat")})
private Set<Extrascat> extrascat = new HashSet<Extrascat>();
// CONSTRUCTORS
public Items() {
}
public Items(int iditems, Categories categories, String name, String description, double priceInCents, int hidden, Set<Extrascat> extrascat) {
this.iditems = iditems;
this.categories = categories;
this.name = name;
this.description = description;
this.priceInCents = priceInCents;
this.hidden = hidden;
this.extrascat = extrascat;
}
// GETTERS AND SETTERS
public int getIditems() {
return iditems;
}
public void setIditems(int iditems) {
this.iditems = iditems;
}
public Categories getCategories() {
return categories;
}
public void setCategories(Categories categories) {
this.categories = categories;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public double getPriceInCents() {
return priceInCents;
}
public void setPriceInCents(double priceInCents) {
this.priceInCents = priceInCents;
}
public int isHidden() {
return hidden;
}
public void setHidden(int hidden) {
this.hidden = hidden;
}
public Set<Extrascat> getExtrascat() {
return extrascat;
}
public void setExtrascat(Set<Extrascat> extrascat) {
this.extrascat = extrascat;
}
public int getHidden() {
return hidden;
}
}
Itemsextrascat.java
@Entity
@Table(name = "itemsextrascat")
public class Itemsextrascat implements Serializable {
private static final long serialVersionUID = 7640244484584804821L;
@Id
@GeneratedValue
private int iditemsextrascat;
@ManyToOne
@JoinColumn(name = "iditems")
private Items items;
@ManyToOne
@JoinColumn(name = "idextrascat")
private Extrascat extrascat;
// CONSTRUCTORS
public Itemsextrascat() {
}
public Itemsextrascat(int iditemsextrascat, Items items, Extrascat extrascat) {
this.iditemsextrascat = iditemsextrascat;
this.items = items;
this.extrascat = extrascat;
}
// GETTERS AND SETTERS
public int getIditemsextrascat() {
return iditemsextrascat;
}
public void setIditemsextrascat(int iditemsextrascat) {
this.iditemsextrascat = iditemsextrascat;
}
public Items getItems() {
return items;
}
public void setItems(Items items) {
this.items = items;
}
public Extrascat getExtrascat() {
return extrascat;
}
public void setExtrascat(Extrascat extrascat) {
this.extrascat = extrascat;
}
}
Extras.java
@Entity
@Table(name = "extras")
public class Extras implements Serializable {
private static final long serialVersionUID = 8644201177004602944L;
@Id
private int idextras;
private String name;
private double priceincents;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "idextrascat")
private Extrascat extrascat;
@ManyToMany(cascade = { CascadeType.ALL }, mappedBy = "extras")
private Set<Orderitem> orderitem = new HashSet<Orderitem>();
// CONSTRUCTORS
public Extras() {
}
public Extras(int idextras, String name, double priceincents, Extrascat extrascat) {
this.idextras = idextras;
this.name = name;
this.priceincents = priceincents;
this.extrascat = extrascat;
}
// GETTERS AND SETTERS
public int getIdextras() {
return idextras;
}
public void setIdextras(int idextras) {
this.idextras = idextras;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPriceincents() {
return priceincents;
}
public void setPriceincents(double priceincents) {
this.priceincents = priceincents;
}
public Extrascat getExtrascat() {
return extrascat;
}
public void setExtrascat(Extrascat extrascat) {
this.extrascat = extrascat;
}
}
我應該刪除itemsextrascat.java以及服務和Dao,並且查詢c:foreach – Marios
的其中一個項目或額外項目爲UI創建不同bean的良好實踐。實體bean用於後端邏輯處理。 –
首先生成有效的HTML。您不能在tr內直接顯示文本。在tr中包含第三個模糊,在td中也包含。測試必須在th或td內,但不能直接在tr中。不要對兩個不同的東西使用相同的變量名稱(itemsextrascat)。不要使用複數形式(演員,項目等)來指代單個事物(一個額外的)。 –