我正在NetBeans中使用Java创建一些RESTful Web服务。
当我创建具有外键约束的表时,无法对所有资源发出GET / POST请求,只能发出一个请求(500 Internal Server Error)。尽管“计数”确实有效。
当我创建没有外键约束的表时,我可以毫无问题地访问资源。这使我相信自动生成的定义外键关系的Java代码有问题。
我可以访问一个表,与其他表相比,该表唯一不同的是它没有外键。我无法访问的所有表都引用了“ USERS”表,“ USERS”也没有外键,但是我仍然也无法通过REST访问“ USERS”。
如果我在数据库中输入未在其他任何表中引用其User_ID的用户,则可以通过REST获取该用户的详细信息。
以下是Users实体中用于映射关系的代码:
@OneToOne(cascade = CascadeType.ALL, mappedBy = "users")
private Credential credential;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userId")
private Collection<Report> reportCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userId")
private Collection<Consumption> consumptionCollection;
然后例如,下面是“消费”实体中的相应代码:
@JoinColumn(name = "FOOD_ID", referencedColumnName = "FOOD_ID")
@ManyToOne(optional = false)
private Food foodId;
@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
@ManyToOne(optional = false)
private Users userId;
凭据实体:
@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID", insertable = false, updatable = false)
@OneToOne(optional = false)
private Users users;
食物实体:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "foodId")
private Collection<Consumption> consumptionCollection;
报告实体:
@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
@ManyToOne(optional = false)
private Users userId;
我真的看不到这里出了什么问题,但是通过一些测试,我相信问题与Java中FK关系的表达方式有关。
任何反馈都非常感谢。