Hibernate query a foreign key field with ID

不想你离开。 提交于 2019-12-03 04:32:43

问题


For example, I have two entities: Employee and Address. Of these enitities, Employee has a foreign key AddressID references the ID column on Address. In the Java domain objects, Hibernate nicely wraps the forgein key integer field with a Address object field. But now, how could I query the Employee with a certain AddressID?

I have tried to create a table alias. That seems to work, but it is fairly awkward.

I had also tried to do something like this:

criteria.add(restriction.eq("TheAddressObjectFieldName", 123);

It works some time but not always. I am not sure this is the right way, but I was hoping it could all the time.

So what is the right way to query on a foreign key column in hibernate?


回答1:


Hibernate "nicely wraps" only what you tell it to wrap. So, assuming that your Employee mapping looks something like:

@Entity
public class Employee {
  ...
  @ManyToOne
  @JoinColumn(name="address_id")
  private Address address;
  ...
}

and your Address has an id property, you can query based on address_id via:

session.createCriteria(Employee.class)
 .add(Restrictions.eq("address.id", addressId));

In order to query based on Address properties, you'll have to create aliases or nested criteria:

session.createCriteria(Employee.class)
 .createAlias("address", "a")
 .add(Restrictions.eq("a.postalCode", postalCode));



回答2:


Having similar trouble... @ChssPly76 answer works fine, but just found solution if foreign key is not part of Id in parent table - you must modify annotation by adding "referencedColumnName":

@ManyToOne
@JoinColumn(name="address_id", referencedColumnName="addrUniqueFieldName")
private Address address;

and then you can create criteria:

criteria.add(restriction.eq("address.addrUniqueFieldName", 123);


来源:https://stackoverflow.com/questions/1787086/hibernate-query-a-foreign-key-field-with-id

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!