0
也許有人在這裏可以給我一個提示,其中誤差可以位於(JSF 2.2,Glassfish的4.0):@ManyToMany在連接表中沒有條目
- 我有兩個實體用多對多關係(見例子)
- 當我在GlassFish中部署我的項目(也鏈接表)正確生成所有表(創建的表格中的persistence.xml啓用):TAGUSERWISH,TAGUSERWISH_WISH(鏈接表),祝
- 當我執行一個堅持(看例子)實體「願望」和「tagUserWish」被正確保存,但是當我直接看我時沒有任何東西寫入鏈接表nto mysql表。但是,當我讀到「心願」出與JPA的
List<TagUserWish>
充滿 - 只要一個新的會話開始(重新部署)
List<TagUserWish>
也爲空時JPA讀出
業主單位:
@Entity
public class Wish implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String subject;
private String abstractT;
@OneToOne
private User user;
@ManyToMany(mappedBy = "wishes", cascade = {CascadeType.ALL})
private List<TagUserWish> tags = new LinkedList<>();
public void addTag(TagUserWish tag){
tags.add(tag);
}
public void setTags(List<TagUserWish> tags) {
this.tags = tags;
}
public void removeTag(TagUserWish tag){
tags.remove(tag);
}
public List<TagUserWish> getTags(){
return tags;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getAbstractT() {
return abstractT;
}
public void setAbstractT(String abstractT) {
this.abstractT = abstractT;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Wish)) {
return false;
}
Wish other = (Wish) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "eu.citato.main.model.Wish[ id=" + id + " ]";
}
}
實體2:
@Entity
public class TagUserWish implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
public TagUserWish() {
}
public TagUserWish(String name) {
this.name = name;
}
@ManyToMany
private List<Wish> wishes = new LinkedList<>();
public void addWish(Wish wish){
wishes.add(wish);
}
public void setWishes(List<Wish> wishes) {
this.wishes = wishes;
}
public void removeWish(Wish tag){
wishes.remove(tag);
}
public List<Wish> getWishes(){
return wishes;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof TagUserWish)) {
return false;
}
TagUserWish other = (TagUserWish) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "eu.citato.main.model.Tag[ id=" + id + ", name="+name+" ]";
}
}
我如何堅持它:
@javax.inject.Named
@SessionScoped
public class WishPM implements Serializable {
@EJB
private WishService wls;
public void commitEditWish(){
List<TagUserWish> selTags = new ArrayList<>();
selTags.add(new TagUserWish("Tag1"));
selTags.add(new TagUserWish("Tag2"));
currentWish = new Wish();
currentWish.setSubject("wishSubject");
currentWish.setAbstractT("wishAbstract");
currentWish.setTags(selTags);
wls.createWish(currentWish);
}
}
與志願服務:
@Stateless
public class WishService implements Serializable{
@PersistenceContext(unitName = "WishlistPU")
private EntityManager em;
public void createWish(Wish entity){
em.persist(entity);
}
}
謝謝。這正是錯誤所在的地方。但是也許我可以再問一個問題以便更好地理解:隨後,我嘗試用@ManyToMany(cascade = {CascadeType.ALL})標記實體'TagUserWish'和@ManyToMany(mappedBy =「tags」)'和實體Wish。 )'因爲這種方式持久會少一些代碼,就像我的例子。但是這不起作用。 「WISH_TAGUSERWISH」已創建,但沒有通過持續插入。不應該這樣工作嗎? – timmornYE