2017-11-29 32 views
0

com.opencsv 4.1을 사용하고 엔티티 클래스를 CSV 파일로 내보내려고합니다. 문제는이 엔티티 클래스가 다른 클래스를 확장한다는 것입니다. 그래서, 내보낼 때 하위 클래스의 필드 만 가져옵니다.opencsv가 상위 클래스의 속성을 내 보내지 않습니다.

List<ActiveSubstance> activeSubstances = getActiveSubstances(); 
    File reportFile = new File("activeSubstances.csv"); 
    Writer writer = new PrintWriter(reportFile); 


    StatefulBeanToCsv<ActiveSubstance> beanToCsv = new StatefulBeanToCsvBuilder<ActiveSubstance>(writer) 
     .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER) 
     .withSeparator(CSVWriter.DEFAULT_SEPARATOR) 
     .build(); 
    beanToCsv.write(activeSubstances); 
    writer.close(); 

나는 아래 라인이 얻을 보낸 파일 :

,,false,[email protected] 

내 부모 클래스 :

@MappedSuperclass 
public abstract class AbstractEntity { 

    @Id 
    @DiffIgnore 
    @Column(name = "UUID") 
    @CsvBindByName(column = "UUID") 
    @CsvBindByPosition(position = 0) 
    private String uuid; 

    @Column(name = "CODE") 
    @CsvBindByName(column = "CODE") 
    @CsvBindByPosition(position = 1) 
    private String code; 

public String getUuid() { 
    return uuid; 
    } 

    public void setUuid(String uuid) { 
    this.uuid = uuid; 
    } 

    public String getCode() { 
    return code; 
    } 

    public void setCode(String code) { 
    this.code = code; 
    } 
} 
을 아래

은 csv 파일에을 writting 내 코드입니다

우리 아이 클래스 :

@Entity 
@Table(name = "T_ACTIVE_SUBSTANCE") 
public class ActiveSubstance extends AbstractEntity { 

    @Column(name = "CRITICAL") 
    @CsvBindByName(column = "CRITICAL") 
    @CsvBindByPosition(position = 3) 
    private Boolean critical; 

    @ManyToOne 
    @JoinColumn(name = "ACTIVE_SUBSTANCE_CLASS_ID") 
    @CsvBindByName(column = "ACTIVE_SUBSTANCE_CLASS_ID") 
    @CsvBindByPosition(position = 4) 
    private ActiveSubstanceClass activeSubstanceClass; 

/** 
    * Default constructor 
    */ 
    public ActiveSubstance() { 
    } 

    public Boolean getCritical() { 
    return critical; 
    } 

    public void setCritical(Boolean critical) { 
    this.critical = critical; 
    } 

    public ActiveSubstanceClass getActiveSubstanceClass() { 
    return activeSubstanceClass; 
    } 

    public void setActiveSubstanceClass(ActiveSubstanceClass activeSubstanceClass) 
    { 
    this.activeSubstanceClass = activeSubstanceClass; 
    } 
} 

왜 부모 속성을 내보낼 수 없습니까? 어떻게 얻을 수 있습니까? 또한, 어떻게 내 CSV 파일 및 개체 아니라 activeSubstanceClass.toString 얻을 수 있습니까?

누군가가 도울 수 있다면 정말 고맙게 여길 것입니다.

미리 감사드립니다.

답변

0

추상 클래스의 필드를 private 대신 protected로 만들려고 했으므로 하위 클래스에서 볼 수 있도록 했습니까?