Olá, estou tendo a seguinte exception Found shared references to a collection e não estou conseguindo visualizar o problema no relacionamento, preciso persistir uma lista de usuários que receberão um email, abaixo segue os modelos:
Model User:
@javax.persistence.Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class User extends Entity {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="h_seq_user")
@SequenceGenerator(name="h_seq_user", sequenceName="h_seq_user")
@Index(name="index_001_user")
private Long id;
@NotNull(message="#{default.NotNull}")
@Column(length=100,unique=true)
@Size(min=10,max=100,message="{user.NameSize}")
@Index(name="index_002_user")
private String name;
@NotNull(message="#{default.NotNull}")
@Column(length=15,unique=true)
@Size(min=5,max=15,message="{user.UserNameSize}")
@Index(name="index_003_user")
private String username;
@Column(name = "picture")
private byte[] picture;
private boolean active;
@NotNull(message="#{default.NotNull}")
@Pattern(regexp = "^[\\w\\-]+(\\.[\\w\\-]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$", message="{user.Email}")
@Column(length=250,unique=true)
private String email;
@ManyToMany(
cascade = {CascadeType.REFRESH},
mappedBy = "users",
targetEntity = Groupuser.class
)
private List <Groupuser> groupusers;
@ManyToMany(
cascade = {CascadeType.REFRESH},
mappedBy = "users",
targetEntity = Email.class
)
private List <Email> emails;
//Get´s e Set´s
Model Email:
@javax.persistence.Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Email extends Entity {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="h_seq_email")
@SequenceGenerator(name="h_seq_email", sequenceName="h_seq_email")
@Column(nullable=false)
@Index(name="index_001_email")
private Long id;
@NotEmpty(message="{default.NotNull}")
@Column(length=120,nullable=false)
private String emailfrom;
@NotEmpty(message="{default.NotNull}")
@Column(length=300,nullable=false)
private String subject;
@NotEmpty(message="{default.NotNull}")
@Column(length=5000,nullable=false)
private String msg;
@NotNull(message="{default.NotNull}!")
@Index(name="index_002_email")
@ManyToOne
@JoinColumn(name="user_id")
private User user;
@NotNull(message="{default.NotNull}")
@ManyToMany(
targetEntity=User.class,
cascade={CascadeType.REFRESH}
)
@JoinTable(
name="email_user",
joinColumns=@JoinColumn(name="email_id"),
inverseJoinColumns=@JoinColumn(name="user_id")
)
private List <User> users;
Método onde estou tendo problema:
public void sendEmailUpdateUser(User user){
List<User> users = groupuser_repository.find(4l).getUsers();
Email email = new Email();
email.setMsg("Data updated");
email.setSubject("User updated");
email.setUser(session_user.getLogged());
email.setUsers(users);
email.setEmailfrom("my.email@provedor.com.br");
validator.validate(email);
validator.onErrorUsePageOf(UserController.class).edit(user);
repository.create(email);
result.redirectTo(UserController.class).index();
}
Exception:
Caused by: org.hibernate.HibernateException: Found shared references to a collection: br.com.app.models.Email.users
at org.hibernate.engine.internal.Collections.processReachableCollection(Collections.java:178)
at org.hibernate.event.internal.FlushVisitor.processCollection(FlushVisitor.java:59)
at org.hibernate.event.internal.AbstractVisitor.processValue(AbstractVisitor.java:121)
at org.hibernate.event.internal.AbstractVisitor.processValue(AbstractVisitor.java:82)
at org.hibernate.event.internal.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:76)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:174)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:225)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1210)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:399)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:75)
... 43 more
Alguém tem uma idéia?