Возможно, кто-то здесь может дать мне совет, где может быть расположена ошибка (JSF 2.2, GlassFish, 4,0):@ManyToMany нет записей в таблице ссылок
- У меня есть два объекта с manytomany соотношения (смотрите пример)
- Когда я раскрываю свой проект в GlassFish все таблицы (также связующая таблица) генерируются правильно (создать столы включены в persistence.xml): TAGUSERWISH, TAGUSERWISH_WISH (соединение таблицы), ЖЕЛАЕМ
- Когда я исполняю сохраняться (см. пример) сущность «пожелание» и «tagUserWish» сохраняется правильно, но ничего не записывается в таблицу ссылок, когда я смотрю прямо i в таблицу 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 + " ]";
}
}
Entity 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);
}
}
Спасибо. Именно там была ошибка. Но, возможно, я могу задать еще один вопрос для лучшего понимания. Впоследствии я попытался отметить объект 'TagUserWish'' @ManyToMany (mappedBy = "tags") 'и сущность' Wish' с '@ManyToMany (cascade = {CascadeType.ALL}) 'потому что таким образом сохранение будет меньше кода, как в моем примере. Но это не сработало. 'WISH_TAGUSERWISH' был создан, но ничего не было вставлено. Разве это не работает? – timmornYE