programing

JPA: 정수 목록을 단일 필드에 저장합니다.

stoneblock 2023. 7. 8. 10:33

JPA: 정수 목록을 단일 필드에 저장합니다.

표준 JPA 2로 각 엔티티 테이블의 단일 필드에 정수 목록을 저장할 수 있습니까?

@Entity
@Table(name="tbl_myentities")
public class MyEntity {

@ElementaryCollection
@Column(name="vals") // in table tbl_myentities
private List<Integer> vals;

단일 필드에 여러 값을 저장할 수 없습니다.단일 필드에 저장하는 이유는 무엇입니까?

한 가지 방법은 String 유형의 필드를 사용하여 쉼표로 구분된 목록에 모든 정수를 추가하고 게터와 세터를 결합/폭발하는 것입니다.

private String vals;

public setVals(int vals[])
{
     // this.vals = Iterate vals[] and create a comma separated string
}

public int[] getVals()
{
    // vals.split(",") to get a list of Strings, then typecast/parse them to ints before returning
}

사용@ElementCollection주석 및@CollectionTable매핑을 제어하려면 값을 저장할 별도의 테이블이 필요합니다.

@ElementCollection
private Collection<Integer> integers;

요소 컬렉션에 대한 자세한 내용은 http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection 에서 확인하십시오.

여기서 유사한 질문 JPA @ElementCollection 주석은 항상 일대일 관계를 생성합니까?

변환기를 생성하여 @Converter 주석과 함께 사용할 수 있습니다.

이 변환기는 transvertToDatabaseColumn 및 transvertToEntityAttribute 두 가지 메서드를 사용하는 일반 인터페이스인 AttributeConverter를 구현해야 합니다.

jpa 독립적인 사용자 지정 유형 매핑 / javax.persistence.x org.hibernate.notations 대신 jpa 독립 사용자 지정 유형 매핑 / javax.persistence.x를 확인할 수 있습니다.유형 및 org.hibernate.notations를 입력합니다.유형 정의

모든 밸브를 쉼표로 구분하여 String 필드에 저장하고 관련 게터 및 세터를 다음과 같이 변경할 수 있습니다.

public List<Integer> getVals() {
    List<Integer> lstVals = new ArrayList<Integer>();
    int val = 0;

    for(String field : this.vals.split(",")) {
        try {
            val = Integer.parseInt(field);
        }
        // If the String contains other thing that digits and commas
        catch (NumberFormatException e) {
        }
        lstVals.add(val);
    }

    return lstVals;
}

public void setVals(List<Integer> vals) {
    String newVals = "";
    for(int i : vals) {
        newVals.concat(String.valueOf(i));
    }
    this.vals = newVals;
}

난 그게 가능하다고 생각 안 해.데이터베이스 테이블에는 정수 목록을 저장할 수 있는 열이 있을 수 없기 때문입니다.

정수 목록 대신 문자열 유형 필드를 사용할 수 있습니다.

@Column(name="vals") // in table tbl_myentities
private String vals;

그리고 정수 목록에서 문자열로 변환하고 엔티티를 저장하기 전과 엔티티를 읽은 후 수동으로 뒤로 돌아갑니다.

혹시 @Lob이 당신에게 어울릴 수 있을까요? (의미는 있지만)

@Lob
ArrayList<String> vals;

(수집은 명시적으로 ArrayList여야 합니다.

언급URL : https://stackoverflow.com/questions/9065620/jpa-store-a-list-of-integers-in-a-single-field