我有以下内部联接的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;
如何在hibernatye语言中编写相同的查询。任何人请帮助我。 我已经尝试了很多,但我做不到。
谢谢
答案 0 :(得分:5)
你做不到。 HQL更新查询不能有联接。见the documentation:
需要注意的一些要点:
- [...]
- 可以在批量HQL查询中指定隐式或显式的连接。
答案 1 :(得分:0)
相反,您可以尝试在此处运行本机查询。只需在查询中添加@Query批注,然后在JPQL查询的末尾添加nativeQuery = true即可触发查询的本机行为。
请记住,您需要对本机查询使用所有本机组件,因此,如果将实体类“ Employee”映射到数据库中的表“ employee”,则您的查询应为从员工中选择姓名,而不是从员工中选择姓名。
谢谢。