java - JPA多对多问题

标签 java sql jpa openjpa

我有两个表:用户和产品。我试图自动创建一个新的表 TestedProducts,这是用户和产品之间的多对多关系。但是,我收到此错误。

org.apache.jasper.JasperException: javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
<openjpa-1.2.1-r752877:753278 fatal user error> org.apache.openjpa.persistence.ArgumentException: 
"ejb.UserEntity.products<element:interface ejb.Product>" has columns with targets, but OpenJPA does not support any joins on this mapping in this context.

UserEntity 看起来很简单。

long id;

String firstname;
String lastname;
String password;
String email;
String description;

List<Product> products;

public void setId(long id){
    this.id = id;
}

@Id
@GeneratedValue
public long getId() {
    return id;
}

@ManyToMany
@JoinTable(name="TestedProducts", 
joinColumns=
    @JoinColumn(name="usrId", referencedColumnName="id"),
  inverseJoinColumns=
  @JoinColumn(name="prodId", referencedColumnName="id")
  )
  public List<Product> getProducts() {
    return products;
  }

  public void setProducts(List<Product> products) {
    this.products = products;
  }

ProductEntity 是这样的:

long id;

String name;
String description;
String type;

List<User> users;

@ManyToMany(mappedBy="products") 
protected List<User> getUsers() {
    return users;
}

protected void setUsers(List<User> users) {
this.users = users;
}

我跳过了其余的 setter 和 getter。

最佳答案

您需要以与在用户实体中相同的方式注释产品实体中包含用户的列表,只是相反。我认为mappedby 值的处理方式不同。

关于java - JPA多对多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700683/

相关文章:

java - MySQL Java Spring batchUpdate 列名转义

mysql - 在多个一对多表上的 Mysql 上获取 group by 数据时出现问题

sql - SQL不接受我的评论

mysql - 无法删除最大用户连接数

java - 无法读取日志文件并加载到 db java

java - JAXB 给我 : java. lang.IllegalArgumentException: is parameter must not be null

java - 如何摆脱循环中多余的打印语句

Java:过滤掉重复的事件

java - 编辑前 JPA 分离

java - Flyway自动生成迁移SQL