2012-01-29 17 views
12

Tôi đã có một ứng dụng đang sử dụng Grails 1.3.7 mà tôi vừa di chuyển sang Grails 2.0. Ứng dụng này sử dụng các trường tự động dateCreatedlastUpdated để quản lý dấu thời gian được liên kết với việc tạo và sửa đổi các đối tượng. Sau khi nâng cấp, tôi nhận được lỗi sau:dateCreated, lastUpdated fields in Grails 2.0

| Running Grails application 
| Error 2012-01-29 22:36:53,504 [Thread-8] ERROR util.JDBCExceptionReporter - ERROR: null value in column "date_created" violates not-null constraint 
| Error 2012-01-29 22:36:53,510 [Thread-8] ERROR events.PatchedDefaultFlushEventListener - Could not synchronize database state with session 

Nhận xét các trường được đề cập ở trên trong Lớp miền của tôi khiến sự cố không còn nữa.

Có các trường dateCreatedlastUpdated không được chấp nhận trong Grails 2.0 không? Nếu vậy, điều đó có nghĩa là tôi phải viết mã để xử lý chức năng này theo cách thủ công hoặc có mã được chuyển đến một plugin thuộc loại nào đó, chẳng hạn như plugin audit-trail?

Trả lời

17

Ok, cố định nó bằng cách tự thiết lập các biến autoTimestamp để "true" trong định nghĩa lớp miền:

static mapping = { 
     autoTimestamp true 
} 

tôi sẽ đoán rằng thuộc tính này không được thiết lập sau khi di chuyển một dự án từ Grails 1.3.7 đến 2.0.0.

+0

cảm ơn bạn rất nhiều! Tôi đã gặp phải vấn đề bởi vì grails 2.2.0 đã ghi đè giá trị mà tôi đã đặt trong lớp miền. Và điều nguy hiểm hơn là timeStamp được Grails thêm vào là phụ thuộc vào đồng hồ hệ thống. – tusar

+0

Tôi đã cố định ghi đè tự động bằng cách đặt thuộc tính autoTimestamp thành 'false' – tusar

+0

Tính năng này không hoạt động trong Kiểm tra tích hợp – codewandler

6

Grails 2.0 vẫn hỗ trợ dấu thời gian tự động. It's listed in the manual (scroll up a bit from this link).

Tuy nhiên, nó đặc biệt đề cập đến:

If you put nullable: false constraints on either dateCreated or lastUpdated , your domain instances will fail validation - probably not what you want. Leave constraints off these properties unless you have disabled automatic timestamping.

+0

Liên kết bạn đăng lên http: // localhost/~ phil /. Bạn đã đặt liên kết sai? – srkiNZ84

+0

Không có trường nào được đề cập ở tất cả các ràng buộc. Dựa trên văn bản trích dẫn tôi bắt đầu nghĩ rằng tôi có thể đã vô hiệu hóa bằng cách nào đó "tự động timestamping". Bạn lấy văn bản đó từ đâu? – srkiNZ84

+0

Xin lỗi về điều đó, tôi đang duyệt bản sao ngoại tuyến của mình. Liên kết đã được sửa. Thông báo cảnh báo nằm trên trang tôi đã liên kết. Bạn phải cuộn *** UP *** từ liên kết, bởi vì tôi không thể liên kết trực tiếp. – OverZealous

3

Có lỗi trong Grails 2.0.3 có thể gây ra sự cố này khi sử dụng Postgres. Xem http://jira.grails.org/browse/GRAILS-8988. Vấn đề nói rằng nó sẽ giải quyết khi 2.0.4 được phát hành.

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