2013-02-15 3 views
8

:JPA 매핑의 기본 유형입니다. 데이터베이스 열이 NULL 일 경우 어떻게해야합니까? JPA (JPA 1.0 및 최대 절전 모드를 사용하여)와 매핑이 클래스 감안할 때

@Entity 
public class Foo { 

    private int bar; 

    /* ... */ 
} 
  1. 내가 NULL로 설정 BAR 열이있는 기록을로드하려고하면 어떻게됩니까?
  2. 해당 열이 NULL 일 때 bar 필드를 설정하는 방법을 지정할 수 있습니까?

참고

나는 이것이 가장 좋은 방법은 아니라는 것을 알고. 문제는 호기심 많은이며이 상황에 의해 영감 :

  • 데이터베이스 테이블은 스테이징 테이블하십시오 NOT NULL 제약 조건을 추가하는 것은 비현실적이다. 나쁜 데이터가 예상되며, 내 코드의 요점은 데이터를 "실제"데이터베이스에로드하기 전에 데이터를 확인, 정리 및/또는 거부하는 것입니다.
  • 일부 입력란에는 기본값을 사용할 수 있습니다. 예를 들어 boolean 플래그는 기본값이 false이어야합니다.
+3

db 열에 null을 포함 할 수 있으면 값을 나타 내기 위해 래퍼 클래스를 사용해야합니다. – Perception

답변

2
  1. 예외

2.

@Column(name = “bar”, nullable = false, columnDefinition = “bigint(20) default 0″) 
private int bar; 

은 당신의 문제를 해결한다.

+0

하지만 2 점으로 데이터베이스 열 정의를 변경해야합니까? –

+0

Null 표현을 원할 경우 막대를 정수로 변경해야한다는 것에 동의합니다. 그러나 null을 피하려면 기본값을 설정할 수 있습니다. – Matheus

+0

그건 그렇고, 나는 기본 유형이 이미 기본 값을 가지고 있다고 생각해. 그러나 이미 항목이 null 인 열이있는 경우 Integer로 변경 막대가 솔루션입니다. – Matheus

11

Matheus의 아이디어가 잘못된 데이터를 가져 오기 때문에 열에 null 값이 포함될 수있는 경우 오히려 개체를 사용합니다. NULL <> 0!

+0

여기에 잘못된 데이터가 무엇을 의미하는지 설명해주십시오. Matheus가 기본값을 0으로 설정하고 nullable = false로 설정하면 절대 null이되지 않습니다. 나쁜/잘못된 데이터 란 무엇입니까? – Ankit

+2

'columnDefinition'은 DDL 생성 (즉, 테이블을 생성하고 변경하기위한 구문을 생성)을 위해서만 * 사용됩니다. 그래서 디폴트 값은 기본 값이 될 것입니다. 실제로 JPA를 사용할 때 기본값을 사용하여 열을 생성해서는 안됩니다. 필드가 프리미티브 인 경우 기본 유형의 기본값으로 기본 설정됩니다. 필드가 개체 인 경우 데이터베이스는 테이블에 정의 된대로 기본값을 설정하지만 삽입 된 엔터티 개체의 열의 대응 ​​항목은 기본값을 반영하도록 업데이트되지 않습니다. –