2015-01-29 21 views
20

Tôi có một thuộc tínhLàm thế nào để thiết lập giá trị boolean mặc định trong JPA

private boolean include; 

Tôi muốn thiết lập giá trị mặc định của nó là true, do đó trong cơ sở dữ liệu nó phải hiển thị Đúng từ mặc định. Điều này có thể xảy ra trong JPA không?

+0

bạn có thể sử dụng gán để thay đổi phương thức giá trị mặc định.create setter và đặt giá trị thực. –

+6

'private boolean include = true;' sẽ hoạt động trên Java. Tuy nhiên, bạn phải đảm bảo rằng cơ sở dữ liệu của bạn có hỗ trợ trực tiếp cho các trường 'boolean' hoặc nếu bạn phải sử dụng trình chuyển đổi. –

+0

Bạn có thể thử làm theo không? Cột (tên = "Bao gồm") boolean riêng bao gồm = true; –

Trả lời

35

Theo như tôi được biết không có giải pháp có nguồn gốc JPA để cung cấp các giá trị mặc định. Ở đây nói đến cách giải quyết của tôi: giải pháp định hướng

Non cơ sở dữ liệu giải pháp di động

@Column(columnDefinition="tinyint(1) default 1") 
private boolean include; 

Java

private boolean include = true; 

Java hướng cộng với mẫu Builder

 @Column(nullable = false) 
    private Boolean include; 
    ... 
    public static class Builder { 
     private Boolean include = true; // Here it comes your default value 
     public Builder include (Boolean include) { 
     this.include = include ; 
     return this; 
    } 
    // Use the pattern builder whenever you need to persist a new entity. 
    public MyEntity build() { 
     MyEntity myEntity = new MyEntity(); 
     myEntity .setinclude (include); 
     return myEntity; 
     } 
... 
} 

Đây là yêu thích của tôi và ít xâm nhập hơn. Về cơ bản, nó ủy nhiệm nhiệm vụ xác định giá trị mặc định cho mẫu Builder trong thực thể của bạn.

+0

Ngoài ra '@Column (columnDefinition =" BOOLEAN DEFAULT false ")' sẽ làm việc cho nhiều cơ sở dữ liệu bao gồm PostgreSQL. – youhans

+0

Bất kỳ ý tưởng nào về ủy ban JPA đề xuất các nhà phát triển làm gì? –

0

Bạn luôn có thể sử dụng chú thích @PreUpdate hoặc @Prepersist trên phương thức bạn sẽ thiết lập những việc cần làm trước khi cập nhật hoặc trước khi lưu vào DB.

Hoặc chỉ đơn giản là thiết lập giá trị private boolean include = true;

2

Sử dụng JPA 2.1 và Oracle 11 công trình này cho tôi bằng cách sử dụng Oracle loại SỐ kích thước 1:

Java:

@Column(name = "ENABLED", nullable = false) 
private boolean enabled = true; 

Tạo SQL kịch bản:

CREATE TABLE "ACCOUNT"(
"ID" NUMBER(10,0) NOT NULL ENABLE, 
"NAME" VARCHAR2(255 CHAR) NOT NULL ENABLE, 
"PASSWORD" VARCHAR2(255) NOT NULL ENABLE, 
"ENABLED" NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE, 
PRIMARY KEY ("ID") 
); 
0

Tôi đã thấy rằng việc thêm vào hàm tạo là cách giải quyết tốt cho các thực thể mới mặc định thành một giá trị:

public EntityName(){ 
    this.fieldToDefault = default; 
} 
0
private boolean include = true; 
+0

Xin chào Hãy thử thêm một số giải thích để cung cấp ngữ cảnh cho người viết mã của bạn hơn là chỉ dán mã. Mặc dù nó có thể làm cho cảm giác hoàn hảo với bạn, nó sẽ là tốt hơn để giải thích nó. –

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