2011-11-02 14 views
5

Mam następujące jednostki:Trwałość Wyjątek podczas korzystania POJO wiążące w kontrolerze ramowej zabaw

@Entity 
public class Client extends Model{ 
    public String email; 
    public String password; 
} 

Mam następujący sterownik:

public static void clientSignUp(models.Client client) 
{ 
    info("Client email" + client.email); 
    info("Client password" + client.password); 
    client.create(); 
} 

Kiedy kontroler ten jest nazywany, dwa dzienniki wydrukować prawidłowo. Ale client.create błędy Zgodnie z tym wyjątkiem hibernacji:

PersistenceException occured : org.hibernate.PropertyAccessException: 
    could not get a field value by reflection getter of models.Client.email 

Jednak, kiedy nieznacznie zmienić kod do:

public static void clientSignUp(models.Client client) 
    { 
    models.Client client2 = new Client(); 
    client2.email= client.email; 
    client2.password = client.password; 
    client2.create(); 
    } 

To działa. Jakieś pomysły, dlaczego?

Odpowiedz

0

Co się stanie, jeśli zmienisz client.create(); w swojej pierwszej wersji na client.save();?

0

Myślę, że dzieje się tutaj błąd. Rozwiązałem podobny problem (otrzymałem ten sam wyjątek - w moim przypadku: user.email) przez wywołanie .merge() zamiast .save()

Później mogę faktycznie usunąć scalenie() i użyć save(), co jest dość dziwne (nawet po restarcie serwera). Coś musi być buforowane.

Więc spróbuj client.merge()

2

I może być kilka miesięcy późno, aby odpowiedzieć na to pytanie, ale wpadłem na podobny problem i udało się go naprawić. Aby uzyskać odpowiedni kontekst, tutaj było moje środowisko:

  1. Inicjalizowałem instancję modelu w Bootstrapie Job.
  2. byłem w trybie DEV, stąd została przy użyciu bazy danych w pamięci (db=mem)

Próbowałem wszystkich z powyższych opcji (.create(), .save(), .merge()) - żadna z nich pracował dla mnie. Nie ponownie uruchomiono aplikacji.

W końcu, czym było podstępne wyczyszczenie katalogu /tmp i ponowne uruchomienie aplikacji.

Powiązane problemy