JPA : 데이터베이스 필드에 문자열을 유지하는 방법, MYSQL 텍스트 입력


83

요구 사항은 사용자가 기사를 작성할 수 있다는 것이므로 mysql 데이터베이스 내의 필드 유형 Text을 선택 content합니다. 어떻게 변환 할 수 있습니다 Java StringMySQL Text

여기 있습니다 Jim Tough

@Entity
public class Article implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private Long userId;

    private String title;

    private String content;

    private Integer vote;

    //Constructors, setters, getters, equals and hashcode
}

내 MYSQL 데이터베이스에서 content유형 Text. 실제 타입 java.sql.Text이기 때문에 이런 것이 있기를 바랬 java.sql.Blob는데 슬프게도 존재하지 않습니다

답변:


132

JPA를 사용하고 있으므로 Lob주석 (및 선택적으로 Column주석)을 사용하십시오. 다음은 JPA 사양이 이에 대해 말하는 내용입니다.

9.1.19 Lob 주석

Lob지속적인 속성 또는 필드가 데이터베이스 지원 대형 오브젝트 유형에 큰 개체로 유지해야하는지 주석 지정합니다. 이식 가능한 애플리케이션은 Lob데이터베이스 Lob 유형에 매핑 할 때 주석을 사용해야합니다 . Lob 주석은 주석과 함께 사용할 수 있습니다 Basic. Lob은 바이너리 또는 문자 유형일 수 있습니다. Lob 유형은 영구 필드 또는 속성의 유형에서 유추되며 문자열 및 문자 기반 유형을 제외하고 기본값은 Blob입니다.

따라서 다음과 같이 선언하십시오.

@Lob 
@Column(name="CONTENT", length=512)
private String content;

참고 문헌

  • JPA 1.0 사양 :
    • 9.1.19 절 "Lob 주석"

25
Hibernate JPA MYSQL에서 문자열 필드에 @Lob플러스 @Column주석을 사용 하면 "잘못된 열 유형, 예상되는 긴 텍스트이지만 열 유형은 텍스트입니다"를 제공합니다. 하지만 문제는 제가 사용했을 때 해결되었습니다@Column(columnDefinition = "text")
gerrytan 2013

4
@Lob과 결합의 의미는 무엇입니까 @Column(length=512)? 왜 행복하지 @Lob않습니까? 둘 다 Hibernate JPA MySQL을 사용할 때 차이가 없습니다. 둘 다 MySQL 필드 유형이 longtext됩니다.
Socrates

이진 열 유형이 있었고 @Lob주석이 작동하지 않았습니다. 그러나 @Column(length=8192)훌륭하게 작동하고 내 문제를 해결했습니다.
yanni

110

@Lob난 항상로 끝날 LONGTEXTMySQL을한다.

TEXT그렇게 하려면 (JPA 2.0) 다음과 같이 선언합니다.

@Column(columnDefinition = "TEXT")
private String text

열이 데이터베이스에서 가질 텍스트 유형을 직접 선택할 수 있기 때문에 이것을 더 잘 찾으십시오.

들어 columnDefinition그것은 또한 좋은 읽기 .

편집 : 적용하기 전에 Adam Siemions 주석에 주의를 기울이고 사용중인 데이터베이스 엔진을 확인하십시오 columnDefinition = "TEXT".


4
:이 TEXT 데이터 열은 데이터베이스 엔진, 예를 들어, HSQLDB, 세부 사항 모두에서 사용할 수 없습니다로, 좋은 해결책이 아니다 stackoverflow.com/questions/4213782/...
아담 시에미 온

1
이것은 모든 프로덕션 데이터베이스에서 사용할 수 있고 원하지 않을 때 "longtext"문제가 없기 때문에 원하는 것입니다.
Nicholas DiPiazza

29

mysql '텍스트':

@Column(columnDefinition = "TEXT")
private String description;

mysql 'longtext'의 경우 :

@Lob
private String description;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.