[英]JPQL query for many to many
我想编写 JPQL 查询来获取具有多对多表的 id 值的行。 我有两个班级:
@Entity
@Table(name = "farm")
@Getter
public class Farm {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "name")
private String name;
@ManyToOne()
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "customer_id", referencedColumnName = "id")
private Customer customer;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_farm", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "farm_id"))
private List<User> users = new ArrayList<>();
}
和
@Entity
@Table(name = "user")
@Getter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@ManyToMany(mappedBy = "users")
private List<Farm> farms = new ArrayList<>();
@Column(name = "is_admin")
private Boolean isAdmin;
}
和一个存储库:
public interface FarmRepository extends JpaRepository<Farm, Long> {
@Query("select f from Farm f join f.users u where u.id=:userId")
List<Farm> findByUserId(@Param("userId") Long userId);
}
但是,我收到此休眠错误:
ERROR: column user2_.id does not exist
如何正确编写 jpql 查询以使其正常工作?
该错误提示查询已执行,但您的数据库表不包含 id 列。
转到您的 application.properties 文件并添加以下内容以在您的控制台中查看 SQL:
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
执行您的测试并查看是否生成了正确的 SQL。
想想谁创建了您的数据库? 自动创建 hbm2ddl 模式? 液碱? 飞道? 模式.sql? 修复您的数据库表。
我想我也可能有类似的问题。 表名“user”经常被保留,你不能使用它。 尝试将其重命名为“person”或其他名称。 可能会有所帮助。
据我所知, @ManyToMany
需要双向关系,但在你的例子中它是单一的。 让我们看看结构:
User:
Long id;
Farm:
Long id;
User_farm:
Long r_user_id;
Long r_farm_id;
那么@JoinTable
必须是:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "USER_FARM",
joinColumns = @JoinColumn(name = "r_user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "r_farm_id", referencedColumnName = "id"))
private List<User> users;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.