Проблема с обновлением идентификатора - PullRequest
0 голосов
/ 17 июня 2011

Я постараюсь объяснить мою проблему, а я могу У меня есть несколько групп пользователей для управления правами пользователей.

Некоторые пользователи могут быть клиентами. Существует соединение OneToOne между таблицей пользователей и таблицей клиентов. И соединение OneToOne между пользователями и группами. Когда я удаляю клиента, мне бы хотелось, чтобы группа пользователей менялась с клиента на пользователя, по умолчанию это группа (Id = 4).

С этим кодом:

    public static void delete(Long id) {
       Customer entity = Customer.findById(id);
       User entityUser = User.findById(entity.user.id);

       entity.delete();

       entityUser.groups.id = (long)4;

       entityUser.merge();
       entityUser.save();

       flash.success(Messages.get("Users.deleted"));
       Customers.list();

   }

Групповая модель:

    @Entity
@Table(name = "groups")
public class Group  extends Model{

   @Required
          public String name;
   @Required
   public String description;
   public Group(String name, String description)
   {
       this.name = name;
       this.description = description;
   }

Модель пользователя:

  @Entity
@Table(name = "users")
public class User extends Model{


   @Required
           public String firstname;
   @Required
           public String lastname;
   @As("dd/MM/yyyy")
   @Required
           public Date birthday;
   @Required
           public String avatar;
   @Required
           public String adress;
   @Required
           public String phonenumber;
   @Required
   @Email
           public String email;
   @Required
           public String username;
   @Required
   @Password
           public String password;
   @OneToOne
   @Required
           public Group groups;

   public User(
           String firstname,
           String lastname,
           @As("dd/MM/yyyy") Date birthday,
           String avatar,
           String adress,
           String phonenumber,
           String email,
           String username,
           String password,
           Group groups
           )
   {
       if(groups == null){
           groups.id = (long)4;
       }
       else
       {
          this.groups = groups;
       }
       this.firstname = firstname;
       this.lastname = lastname;
       this.birthday = birthday;
       this.avatar = avatar;
       this.adress = adress;
       this.phonenumber = phonenumber;
       this.email = email;
       this.username = username;
       this.password = password;




   }

Модель клиента:

 @Entity
@Table(name = "customers")
public class Customer extends Model{

   @As("dd/MM/yyyy")
   public Date dateinscription;
   public Double amountdue;
   public Double amountpaid;
   @Required
   public String picture;
   @OneToOne
           public User user;

   public Customer(@As("dd/MM/yyyy") Date dateinscription, Double amountdue, Doubleamountpaid, String picture, User user)
   {
       this.dateinscription = dateinscription;
       this.amountdue = amountdue;
       this.amountpaid = amountpaid;
       this.picture = picture;
       this.user = user;


   }


}

Но у меня есть ошибка:

PersistenceException occured : org.hibernate.HibernateException: identifier of an instance of models.Group was altered from 3 to 4

В /app/controllers/Customers.java (около строки 69) 65:

66: entityUser.groups.id = (long) 4; 67:

68: entityUser.merge (); 69: entityUser.save (); 70:

71: flash.success (Messages.get ( "Users.deleted")); 72: Customers.list (); 73:

74: } 75:

Я пытался с GenericModel, но он не работал.

Пожалуйста, помогите мне !!

Спасибо.

1 Ответ

1 голос
/ 18 июня 2011

В своем коде вы явно меняете идентификатор группы, а не группы. Hibernate предполагает, что вы хотите изменить это поле. Но когда вы попытаетесь сохранить изменение, оно не позволит вам, так как это идентификатор. Это не означает, что вы имеете в виду «изменить группу на группу с идентификатором 4».

Вместо этого вам нужно загрузить группу по умолчанию и указать группу пользователей, которая будет этой группой.

Group group = Group.findById(4);
entityUser.groups = group;
...