相关的实体清单。获取列表为null,而不是正确的实体

时间:2017-05-17 13:35:41

标签: java hibernate

我认为,这是微不足道的,但我无法识别我的逻辑错误。

所以我有:

@Entity
@Table(name = "PROJECT"))
@SequenceGenerator(name = "project_seq_generator", allocationSize = 20, 
initialValue = 1, sequenceName = "project_seq")
public class Project implements Serializable, Cloneable {

    /** The cost centres. */
    @OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
    @JoinColumn(name = "projectid")
    private List<Center> costCentres = new ArrayList<Center>();

    ...

}

还有其他变量但对此问题没有价值

另一方 - Center,没有映射。

当我尝试使用getter获取costCentres时,我会得到一个包含null值的列表。

这个映射有什么不好吗?

我通常可以添加一个项目,并且数据库中有一个中心,通常是关联项目。

另一个问题是 - 我可以创建标准来获取这些关联的Center吗?

我如何获取它:

public ProjectDTO getProjectByID(int projectID) {
    Project project = null;
    try {
        project = (Project) session.get(project.class, projectID);
    } catch(HibernateException e) {
        // blabla
    }
    return convertToProjectDTO(project);
}

和root:

public ProjectDTO getProjectByID(int projectID) throws HibernateException {
    Transaction tx = null; 
    Session session = HibernateUtils.getNewSession();
    ProjectDTO result = null;
    ProjectManager manager = new ProjectManager(session);
    try {
        tx = session.beginTransaction();
        result = manager.getProjectByID(projectID);
        tx.commit();
    } catch(Exception e) {
        // Bla BLa
    } finally {
        HibernateUtils.conditionalRollback(session);
    }

    return result;
}

这是一个转换问题,而不是休眠问题。

问题不再有效

那是

的问题
return null;

在方法convertTo的代码中 抱歉我的笨蛋

1 个答案:

答案 0 :(得分:0)

您获得带有空值的List,因为您在没有最终字的字段声明中对其进行初始化。

您有3个选项

如果需要ArrayList初始化,请在getter中执行:

public List<Center> getCostCentres() {
 if (costCentres==null)return new ArrayList<Center>();
    return costCentres;
} 

或者您可以将最终字添加为

private final List<Center> costCentres = new ArrayList<Center>();

或者在构造函数中初始化它。