我认为,这是微不足道的,但我无法识别我的逻辑错误。
所以我有:
@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的代码中 抱歉我的笨蛋
答案 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>();
或者在构造函数中初始化它。