2011-11-02 20 views
5

Tôi có thực thể sau:Persistence ngoại lệ khi sử dụng POJO ràng buộc trong điều khiển play framework

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

Tôi đã điều khiển sau:

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

Khi điều khiển này được gọi là, hai bản ghi in ra đúng. Nhưng các lỗi dòng client.create với ngoại lệ ngủ đông này:

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

Tuy nhiên, khi tôi thay đổi mã nhẹ:

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

Nó hoạt động. Bất kỳ ý tưởng tại sao?

Trả lời

0

Điều gì xảy ra nếu bạn thay đổi client.create(); trong phiên bản đầu tiên thành client.save();?

0

Tôi nghĩ rằng có một lỗi đang diễn ra ở đây. Tôi đã giải quyết một vấn đề tương tự (có ngoại lệ tương tự - trong trường hợp của tôi: user.email) bằng cách gọi .merge() thay vì .save()

Sau đó tôi thực sự có thể xóa hợp nhất() và sử dụng save(), đó là khá khủng khiếp (ngay cả sau khi khởi động lại máy chủ). Nội dung nào đó phải được lưu trong bộ nhớ cache.

Vì vậy, cố gắng client.merge()

2

tôi có thể là một vài tháng cuối năm để trả lời câu này, nhưng tôi chạy vào một vấn đề tương tự và đã có thể sửa chữa nó. Để hiểu ngữ cảnh, đây là môi trường của tôi:

  1. Tôi đã khởi tạo một phiên bản mẫu trong Bootstrap Job.
  2. tôi đang ở chế độ DEV, do đó đã sử dụng một cơ sở dữ liệu trong bộ nhớ (db=mem)

Tôi thử tất cả các tùy chọn ở trên (.create(), .save(), .merge()) - không ai trong số đó làm việc cho tôi. Ứng dụng cũng không khởi động lại.

Cuối cùng, mẹo đã làm gì khi xóa thư mục /tmp và khởi động lại ứng dụng.

Các vấn đề liên quan