Tôi gặp sự cố trong đó tôi không thể duy trì hoặc hợp nhất đối tượng chỉ chứa ID và bộ sưu tập các đối tượng khác. Nếu tôi thêm một trường khác, nó sẽ thực hiện giao dịch như bình thường. Ngoài ra, nếu tôi thay đổi chiến lược tạo ID thành AUTO nó cũng sẽ hoạt động.Làm thế nào để duy trì một thực thể chỉ chứa một bộ sưu tập và một ID?
Những người còn lại trong nhóm của tôi sử dụng "IDENTITY" thay vì "AUTO", vì vậy tôi muốn nhất quán với họ. Các thực thể của họ không chỉ là ID + Bộ sưu tập, vì vậy nó hoạt động tốt cho họ. Sau đây là những gì tôi muốn làm cho công việc:
@Entity
public class Filter implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, cascade = { CascadeType.ALL })
private ArrayList<Rule> rules = new ArrayList<>();
public Filter() {
}
}
ErrorMessage:
org.apache.openjpa.persistence.PersistenceException: ERROR: syntax error at or near ")"
Position: 25 {prepstmnt 693640431 INSERT INTO Filter() VALUES()} [code=0, state=42601]
FailedObject: [email protected]
Về cơ bản, vì nó chỉ là một ID và một tham Bảng, nó chết khi cố gắng kéo dài hoặc hợp nhất các bộ lọc không có bất kỳ trường nào.
Cách giải quyết
Thay đổi GenerationType.IDENTITY để GenerationType.AUTO.
-Các chỉ con dường như là chìa khóa chính bắt đầu từ ban đầu để nhảy xung quanh bằng 50, sau đó nó bắt đầu incrementing bởi 1.
Thay đổi GenerationType để TABLE
-Đây có vẻ là những gì AUTO được chọn.
Thêm trường tùy ý vào thực thể (ví dụ: String test = "test").
-Đơn giản làm cho thực thể có thêm một trường nữa làm cho trường đó tồn tại. Tuy nhiên, tôi không cần lĩnh vực này ở đó; Tôi chỉ muốn một bộ sưu tập
Làm cho các mối quan hệ hai chiều.
-Bằng cách tạo mối quan hệ hai chiều, các bảng có id sẽ quay lại (thay vì chỉ là id). Điều này chỉ hoạt động vì Bộ lọc được sở hữu bởi một bản ghi khác.
Nếu nhà cung cấp JPA của bạn không hỗ trợ có câu lệnh INSERT không có cột thì hãy tăng BUG lên đó. Tôi làm điều đó với nhà cung cấp mà tôi sử dụng (DataNucleus) và nó tạo ra đúng SQL. –
Sử dụng AUTO không thực sự là câu trả lời vì AUTO có nghĩa là hãy để nó cho nhà cung cấp chiến lược sử dụng, và họ chỉ có thể sử dụng IDENTITY dưới các bìa kết thúc với cùng một vấn đề. –
Đã bị xóa khỏi tác giả – garfield