【问题标题】:Mapping issue on Hibernate annotationHibernate 注释的映射问题
【发布时间】:2014-06-04 17:45:34
【问题描述】:

我有上面的表我需要写带有注解的 HIbernate 实体类 和映射

我在获取 ObjectAttributes 列表时遇到问题。

类的写法如下

@Entity
public class Object {
    @Id
    private int id;

    private String name;

    @OneToMany(mappedBy="object",fetch=FetchType.LAZY)
    private List<ObjectAttribute> attrubuteList;
}

@Entity
public class ObjectAttribute {
    @Id
    private int id;
    @ManyToOne
    @JoinColumn(name="objectId")
    private Object object;
    private String name;
}

@Entity
public class Filter {
    @Id
    private int filterId;
    @ManyToOne
    @JoinColumn(name="ObjectId")
    private Object object;
    private String filterName;
    @OneToMany(mappedBy="filter")
    private Set<FilterAttribute> filterValues;
}

@Entity
public class FilterAttribute implements Serializable {

    @Id
    private int filterAttrId;
    @Id
    @ManyToOne
    @JoinColumn(name="objectId")
    private Object object;
    @Id
    @ManyToOne
    @JoinColumn(name="filterId")
    private Filter filter;
    @Id
    @ManyToOne
    @JoinColumn(name="attributeId")
    private ObjectAttribute attribute;

    private String value;
}

注意没有添加getter和setter

测试代码如下

List<Object> list = sess.createCriteria(Object.class).list();
        for(Object ob: list)
        {
            System.out.println("Object name : "+ ob.getName());
            List<ObjectAttribute> attList = ob.getAttrubuteList();

            for (Iterator iterator = attList.iterator(); iterator.hasNext();) {
                ObjectAttribute objectAttribute = (ObjectAttribute) iterator
                        .next();
                System.out.println(objectAttribute.getName());
            }
        }

attList = ob.getAttrubuteList();返回 null

【问题讨论】:

  • 对不起,如果我问错了.. null 意味着我的意思是.. 它没有获取 objectAttributes.. 为什么?任何映射问题?

标签: java hibernate orm hibernate-mapping hibernate-annotations


【解决方案1】:

在我的测试代码中创建对象时,如下所示

    Object obj = new Object();
    obj.setId(1);
    obj.setName("Employee");
    sess.save(obj);

    ObjectAttribute ageAtt = new ObjectAttribute();
    ageAtt.setId(1);
    ageAtt.setName("age");
    ageAtt.setObject(obj);
    sess.save(ageAtt);

    ObjectAttribute depAtt = new ObjectAttribute();
    depAtt.setId(2);
    depAtt.setName("department");
    depAtt.setObject(obj);
    sess.save(depAtt);

    ObjectAttribute attName = new ObjectAttribute();
    attName.setId(3);
    attName.setName("name");
    attName.setObject(obj);
    sess.save(attName);

我没有添加这些行

obj.getAttrubuteList().add(depAtt);
        obj.getAttrubuteList().add(attName);
        obj.getAttrubuteList().add(ageAtt);

但我不知道为什么我们需要这样做!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 2022-12-03
    • 2011-07-31
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多