有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java hibernate从子表中选择查询

我刚开始冬眠。我有两个表,它们具有一对多关系。有两个表格:

public class Pashmina implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "sq_pashmina_id")
    @SequenceGenerator(name = "sq_pashmina_id", sequenceName = "sq_pashmina_id")
    @Column(name = "PASHMINA_ID")
    private int pashminaId;

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

    @Column(name = "PRICE")
    private double price;

    @Column(name = "ADDED_AT", insertable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date addedAt;

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

    @Column(name = "ENABLED", insertable = false)
    private Character enabled;

    @OneToMany(mappedBy = "colourId", fetch = FetchType.EAGER)
    private Set<PashminaColour> pashminaColor  = new HashSet<PashminaColour>();

    @OneToMany(mappedBy = "imageId", fetch = FetchType.EAGER)
    private Set<Image> images  = new HashSet<Image>();

    @OneToMany(mappedBy = "descriptionId", fetch = FetchType.EAGER)
    private Set<Description> descriptions  = new HashSet<Description>();

    //getter and setter method

这是一个父类,它与图像表有一对多关系

public class Image implements Serializable {
    @Id
    @Column(name = "IMAGE_ID")
    private int imageId;

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

    @JoinColumn(name = "PASHMINA_ID", referencedColumnName = "PASHMINA_ID")
    @ManyToOne
    private Pashmina pashmina;

现在我想使用其父类的id(即:pashminaId)从Image类中选择一个imagenames

例如:

SELECT IMAGE_NAME FROM TBL_IMAGE WHERE PASHMINA_ID = 'some_digit';

由于没有pashminaId它只有父类Pashmina的对象创建,如何在图像类中传递pashminaId

那么,如何在hibernate中实现这一点呢

如果你不明白我的意思,请告诉我

谢谢!希望得到积极的回应


共 (1) 个答案

  1. # 1 楼答案

    由于Hibernate处理对象而不是SQL表,所以您可以从image对象简单地访问pashmina对象,并且在查询中处理java对象/POJO,因此您可以通过Image.pashmina.pashminaId访问它

    因此,您可以编写以下查询:

    String hql = "select I.imageName FROM Image I WHERE I.pashmina.pashminaId = 10";
    Query query = session.createQuery(hql);
    List results = query.list();