8

我有以下带有内部连接的 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;
}

状态的 Mpping 类

 @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;

我如何用休眠语言编写相同的查询。任何人都可以帮助我。我已经尝试了很多,但我做不到。

谢谢

4

2 回答 2

6

你不能。HQL 更新查询不能有联接。请参阅文档

需要注意的几点:

  • [...]
  • 不能在批量 HQL 查询中指定任何隐式或显式连接。
于 2012-11-20T08:00:46.977 回答
0

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

请记住,您需要将所有本机组件用于本机查询,因此如果实体类“雇员”映射到数据库中的“雇员”表,您的查询应该读取从雇员中选择名称而不是从 Employee 中选择姓名

谢谢。

于 2018-12-31T08:41:51.223 回答