使用innerjoin进行Hibernate更新查询

使用innerjoin进行Hibernate更新查询,hibernate,inner-join,hibernate-mapping,hibernate-criteria,Hibernate,Inner Join,Hibernate Mapping,Hibernate Criteria,我有以下带有内部联接的MySQL更新查询: UPDATE Country AS c INNER JOIN State s ON c.CountryID = s.CountryID INNER JOIN City cy On s.StateID = cy.StateID SET c.Active='Y', s.Active='Y',cy.Active='Y' WHERE c.CountryID='12' 这是我的国家地图课 enter code here @Entity @Ta

我有以下带有内部联接的MySQL更新查询:

 UPDATE Country AS c
 INNER JOIN  State s ON c.CountryID = s.CountryID
 INNER JOIN  City cy On s.StateID = cy.StateID
 SET  c.Active='Y', s.Active='Y',cy.Active='Y'
 WHERE  c.CountryID='12'
这是我的国家地图课

enter code here
@Entity
@Table(name = "Country")
public class Country {
public Country() {
}

@Id
@Column(name = "CountryID")
private String countryID;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "country")
private Set<State> state = new HashSet<State>(0);

@Column(name = "CountryName")
private String countryName;
}
我如何用hibernatye语言编写相同的查询。有人能帮我吗。 我试了很多,但都做不到


谢谢

你不能。HQL更新查询不能有联接。见:

需要注意的几点:

  • [……]
  • 在批量HQL查询中不能指定隐式或显式联接

相反,您可以尝试在此处运行本机查询。只需在查询中添加@query注释,然后在JPQL查询的末尾添加nativeQuery=true即可触发查询的本机行为

请记住,本机查询需要使用所有本机组件,因此如果实体类“Employee”映射到数据库中的表“Employee”,则查询应为从Employee中选择名称,而不是从Employee中选择名称


谢谢

你能发布你的“国家”类的hibernate映射吗?当然。。。现在,我用Country、State实体类更新了我的问题。请运行一次查询并选择实体的ID,然后对具有in(?)限制的每个实体类型运行更新查询。是。如果您使用SQL,就可以用JDBC做任何事情。
 @Entity
 @Table(name = "State")
 public class State {
public State() {
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "countryID", nullable = false)
private Country country;

public Country getCountry() {
    return country;
}

public void setCountry(Country country) {
    this.country = country;
}

@Id
@Column(name = "StateID")
private String stateID;

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

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