我能否检测到hibernate未找到的注释工作

时间:2015-08-31 10:46:52

标签: spring hibernate annotations many-to-one

我有两个具有多对一关系的对象:

对象1:

@Entity
@Table(name=”Person”)
public class Person {
    Long id;
    String name;
    String surname;
    … // other fields

    @NotFound(action=NotFoundAction.IGNORE)
    @ManyToOne @JoinColumn(name = "groupId")
    Group group;

    ....all the getters and setters…
}

对象2:

public class Group {
    @Id
    @Column
    Long groupId;

    @Column
    protected String groupName;

    @Column(precision = 15, scale = 0)
    protected long exampleFieldId;

    ...rest of code....
}

类Person中的字段“group”可以为null。如何确定从数据库或“NotFound”注释中获取空值的位置?

这种情况可能出现在以下情况中:数据库级别的用户可以访问一组有限的组。

2 个答案:

答案 0 :(得分:0)

'未找到'在这种情况下,与null相同。您不能使用null初始化组,因为您将获得NullPointerException。

答案 1 :(得分:0)

你可以尝试在获取ObjectNotFoundException时通过下面的getter和debug来替换@NotFound,但是如果你的组已经为null我认为hibernate可能会初始化组对象为null,这可能会导致NPE,但你可以使用这个代码调试如果你想要一些hibernate代理的自定义加载行为,请使用注释@NotFound。

@ManyToOne @JoinColumn(name = "groupId")
Group group;

private Group getGroup(){
   if(!Hibernate.isInitialized(group)) {
        try {
             Hibernate.initialize(group);
        } catch(org.hibernate.ObjectNotFoundException e) {
            group = null;
        }
    }
  return group;
}