Spring için çok yeni ve beklediğimden çok çok ilişki kurmaya çalışıyorum. İlişkiler iyi çalışır, tablolar oluşturulur ve veriler doğru şekilde eklenir. Beklediğim şey, bir Listeyi boşaltırken (yani "Grup" türündeki bir nesneden "ArrayList" kullanıcılarını boşaltırsam), sistemin veritabanındaki ilişkileri kaldırmasını beklerim - fakat bunu yapmaz. Spring + JPA birçok ilişkiye çok fazla
Aşağıdaki sınıflar var:@Test
public void test()
{
Group g = new Group();
g.setName("Test group");
groupDao.save(g); // Works fine - inserts the group into the database
User u = new User();
u.setName("Test user");
userDao.save(u); // Works fine - inserts the user into the database
g.addUser(u);
groupDao.save(g); // Works fine - adds the many-to-many relationship into the database
g.removeAllUsers();
groupDao.save(g); // Doesn't work - I'm expecting it to remove all the related relationships from the database but it doesn't!
}
yanlış bir şey yaptığını Am I veya öyle: Burada
@Repository
public class GroupJpaDao implements GroupDao
{
private EntityManager em;
@Transactional
public void save(Group group)
{
this.em.merge(group);
}
...
@PersistenceContext
void setEntityManager(EntityManager entityManager)
{
this.em = entityManager;
}
}
@Repository
public class UserJpaDao implements UserDao
{
private EntityManager em;
@Transactional
public void save(User user)
{
this.em.merge(user);
}
...
@PersistenceContext
void setEntityManager(EntityManager entityManager)
{
this.em = entityManager;
}
}
test yöntemidir: DAOs İşte
@Entity
@Table(name = "`group`")
public class Group
{
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(
name = "`user_has_group`",
joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")
)
private List<User> users = new ArrayList<User>();
...
}
@Entity
@Table(name = "`user`")
public class User
{
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
@ManyToMany(mappedBy = "users")
private List<Group> groups = new ArrayList<Group>();
...
}
vardır bir şey yapmak mümkün değil mi?
Herhangi bir ipucu gerçekten takdir edilmektedir.
Teşekkür ederiz!
"Silme-yitimi" kaskat 'özniteliğinize eklemeye çalıştınız mı? – fasseg
"IdTransferringMergeEventListener" ifadesini kullandınız mı? – axtavt
Sorunun nedeninin bu olduğunu bilmiyorsunuz, ancak kaydetme yöntemi geçersiz sayılmamalıdır. Birleştirme çağrısının sonucunu döndürmelidir. Bu değişikliği yapmayı ve döndürülen grubu kullanmayı deneyin: 'g = groupDao.save (g);' –