我有一个csv文件,从那里我将读取数据并将其映射到使用opencsv相应的java对象。我有我的实体类如下
@Data
@Entity
@Table(name="student_info")
public class Student {
@CsvBindByPosition(position = 0)
private String name;
@CsvBindByPosition(position = 1)
private boolean isBusFacilityAvailed;
@CsvBindByPosition(position = 2)
private Integer busFee = 0;
@OneToMany(mappedBy = "markSheet", fetch = FetchType.Lazy)
private List<MarkSheet> marks;
}
如果isBusFacilityAvailed为false,则可能无法获得busFee信息。在数据库中,busFee列不应该保存为空,而应该保存为0,如果信息不存在。
为此,我在上述类中为busFee字段提供了默认值为0,当我在实体类中没有OneToMany映射时,它可以正常工作。
但是当我在实体类中添加OneToMany映射时,它不起作用,busFee的值在DB中被保存为null。
还有其他方法可以解决这个问题吗?
这里的问题是你的类做了不止一件事。它既是从CSV文件中读取的DTO,又是处理数据库的Entity对象。
如果你在这里分离你的关注点,并创建一个类,其唯一目的是从CSV文件中读取并保持实体不变,那么你可以将DTO转换为一个实体,这将使你更容易理解问题在哪里或因此缺乏它。
如何使用@Column
注释与columnDefinition
到busFee提交
@Column(columnDefinition = "integer default 0")
@CsvBindByPosition(position = 2)
private Integer busFee = 0;
让我们知道这是否有效