【问题标题】:Hibernate Object mapping issue休眠对象映射问题
【发布时间】:2014-05-12 05:42:04
【问题描述】:

我有几个数据库表:

User (user_id, firstName, lastName)

Product (id, name, user_id)

user_id 在这里充当外键。

我在下面有几节课。

public class User {

    @Id
    @Column(name = "user_id")
    private int user_id;

    @Column(name = "firstName")
    private String firstName;

    @Column(name = "lastName")
    private String lastName;
    /*getters setter are omitted.*/
}

&另一个是

public class Product {
    @Id
    @Column(name = "id")
    private int id;

    @Column(name = "name")
    private String name;

    @Column(name = "packing")
    private int packing;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;

    public User getUser() {
        return this.user;
    }

    public void setUser(User us) {
        this.user = us;
    }
        /* other getters setter are omitted.*/
}

我的ProductDao.java 班级有这个查询:

List<Product> list = new ArrayList<Product>();
Iterator<?> products = session.createQuery(" SELECT id, name, user FROM Product ") .list().iterator();

如果我从此查询中删除 user,它会运行良好(尽管不会获取 user 的用户详细信息)

请指导我在哪里获取特定user 的所有详细信息。

【问题讨论】:

    标签: hibernate mapping hql


    【解决方案1】:

    您正在发出常规 SQL 查询,而您可能想要发出 HQL 或 JPQL 查询。重要的区别在于 SQL 对 DB 列进行操作,而 HQL 对实体进行操作。由于 Product 表中没有 user 列,因此您将无法获得所需的结果。

    请试试这个:SELECT p FROM Product p

    如果您明确地只想要映射的属性而不是实体本身,请尝试 SELECT p.id, p.name, p.user FROM Product p。请注意,由于 HQL 对实体进行操作,因此您需要点运算符,并且可以使用字段名称而不是列名称。

    【讨论】:

    • 感谢您的帮助。它显示了来自Productuser 的所有数据。我仍然无法获取user 的数据。
    • 原因可能是延迟加载。用户字段是null 还是您遇到异常?您是否正在访问交易中的文件?您是否尝试过通过将注释更改为 FetchType.EAGER 或在查询中添加 LEFT JOIN FETCH 来急切地获取用户?
    • 我在调试中得到用户字段'null'。是的,我也尝试过使用 EAGER 和 LAZY。我在调试模式下看到 user=null,但是当我打印对象(转换为 JSON)时,它没有显示 user 字段。
    • 嗯,这是出乎意料的。您的映射看起来正确,并且使用正确的查询急切地获取应该负责解析引用。您能否确认数据已正确映射并存储在数据库中,这意味着 PRODUCT 表中的行在其 user_id 列中具有外键并且相应的用户存在?对不起这个琐碎的问题,否则我不知道:)
    • 是的,user 表可以正常工作,Product 表中确实有一个键 user_id。谢谢你的帮助。如果我与你分享 git repo,你会帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 2018-01-29
    • 2011-01-31
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多