对未知实体的引用:java.lang.Integer



我有一个简单的@Entity

@Entity
@Table(name = "user")
@Getter       
class User {
    @Id
    @GeneratedValue
    private final Integer userID;    
    private final String username;   
}

另一个,应该持有外键

@Getter
@Builder
@Entity
class Task {
    @Id
    @GeneratedValue
    private final Integer taskID;
    private final String title;
    private final String details;
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinTable(name = "user", joinColumns = {@JoinColumn(name = "userID")})
    private final Integer userID;
}

关键是 - UserTask 类位于单独的包中,并且都是包范围的。意味着我不能简单地写

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinTable(name = "user", joinColumns = {@JoinColumn(name = "userID")})
private final User user;

这就是为什么我得到

@OneToOne or @ManyToOne on com.johndoe.teamplanner.task.domain.Task.userID references an unknown entity: java.lang.Integer

有没有解决方法来实现我需要的?在分离包中的 2 个实体之间创建关系并具有包范围?

您可以尝试以下替代方法:

  • 显而易见的是:将类User的访问器更改为public。但是,如果你问这个可能是因为你没有源代码而无法更改它。
  • 反编译User .class文件以获取源代码。如果用户不是那么复杂,你可以试试这个。然后,将访问器更改为 public
  • 生成您自己的 User 类版本,并将您的版本用于持久性,另一个用于它提供的功能。
  • 将类中的userID映射Task为整数,并通过代码确保永远不会分配不是有效 userID 的值:@Column private Integer userID; 。如果使用 JPA 生成表,则需要在数据库中手动添加外键以确保数据的完整性。

我希望其中一些解决方案可以提供帮助。

相关内容

最新更新