개체 매핑

All lectures for KO purposes
레벨 1, 레슨 845
사용 가능

6.1 서버에 파일 저장

이진 개체를 데이터베이스에 저장해야 하는 경우가 있습니다. 예를 들어 파일입니다. 파일이 크면 디스크의 별도 폴더에 저장하고 경로를 데이터베이스에 저장하는 것이 가장 합리적입니다. 예:

c:\db-files\users\12355\avatar.jpg

그리고 데이터베이스에는 파일에 대한 상대 경로만 저장합니다.

\12355\avatar.jpg

URL을 쉽게 얻을 수 있으므로 데이터베이스에 상대 경로를 저장하는 것이 편리합니다.

https://storage.codegym.cc/users/12355/avatar.jpg

서버 이름에 대한 상대 경로를 붙여넣기만 하면 완료됩니다.

6.2 데이터베이스에 직접 이미지 저장

그러나 그림이 작은 경우 데이터베이스에 직접 저장하고 바이트 집합으로 클라이언트에 제공할 수 있습니다. 이러한 경우 SQL에는 특별한 BLOB 데이터 유형 인 Binary Large Object가 있습니다. 또는 오히려 두 가지가 있습니다.

  • CLOB - 문자 대형 객체,
  • BLOB - 이진 대형 객체.

CLOB는 매우 큰 텍스트를 저장하는 데 사용됩니다. BLOB는 작은 사진, 비디오 등과 같은 이진 데이터를 저장하기 위한 것입니다.

예:

@Entity
@Table(name="user")
public class User {

    @Id
    private String id;

	@Column(name = "name", columnDefinition="VARCHAR(128)")
    private String name;

	@Lob
	@Column(name = "photo", columnDefinition="BLOB")
    private byte[] photo;

	// ...
}

주석은 Large Object가@Lob 필드에 저장되어 있음 을 Hibernate에게 알려줍니다 . 그리고 이미 모든 것을 데이터베이스에 저장하는 방법에 대해 이야기했습니다.columnDefinition="BLOB"

새 사용자와 그의 사진을 데이터베이스에 저장하는 예제 코드를 작성해 보겠습니다.

byte[] imageBuffer = Files.readAllBytes(Paths.get("C:/temp/avatar.png"))

User user = new User();
user.setId("1");
user.setName("Zapp");
user.setPhoto(imageBuffer);

session.persist(user);

6.3 XML과 JSON

Hibernate는 JSON을 데이터 유형으로 흥미롭게 지원합니다. 문자열의 HashMap을 단일 JSON 개체로 저장할 수 있습니다. DBMS가 JSON과 함께 작동할 수 있는 경우 다음과 같습니다.

@JdbcTypeCode(SqlTypes.JSON)
private Map<String, String> properties;

Hibernate는 유형 객체가 Map<String, String>단일 JSON 객체로 직렬화되도록 관리합니다. 또한 데이터베이스에서 객체를 읽을 때 JSON 객체를 Map<String, String>.

Hibernate는 XML로 비슷한 것을 할 수 있습니다:

@JdbcTypeCode(SqlTypes.SQLXML)
private Map<String, String> properties;
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION