在 JPQL 中引用连接列

Referencing join column in JPQL

通过查询 Select c from Card c join User u on c.userId=u.userId where u.username=':u',我试图根据用户 table 中可用的用户名获取用户的卡片列表。但是,当我 运行 它时,我 运行 进入了 antlr.SemanticException: could not resolve property: userId of: com.abc.SheridanSportsWAR.entity.Card 异常。如何在我的 Card 实体中引用 UserId 列?

Card.java

@Entity
public class Card {
    
    @Id
    @Column(name="CardId")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer cardId;
    
    @Column(name="CardNumber")
    private String cardNumber;
    
    @Column(name="CardType")
    private String cardType;
    
    @Column(name="ExpiryMonth")
    private String expiryMonth;
    
    @Column(name="ExpiryYear")
    private String expiryYear;
    
    @Column(name="CardHolder")
    private String cardHolder;

    @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH})
    @JoinColumn(name = "UserId")
    private User userJ;
    
    @OneToMany(mappedBy = "cardJ")
    private List<Purchase> purchases;

User.java

@Entity
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="UserId")
    private Integer userId;
    
    @Column(name="FirstName")
    private String firstName;
    
    @Column(name="LastName")
    private String lastName;
    
    @Column(name="Email")
    private String email;
    
    @Column(name="Username")
    private String username;
    
    @Column(name="Password")
    private String password;
    
    @Column(name="RoleName")
    private String roleName;
    
    @OneToMany(mappedBy="userJ", cascade= CascadeType.ALL)
    private List<Card> cards;

错误信息很清楚。您的 Card 实体中没有字段 userId。创建一个这样的:

@Column(name = "UserId", insertable=false, updatable=false)
private Integer userId;

AFAIK,问题似乎是 card table.

中没有 userId