我有一个recipe.java对象,里面有@entity:
...
@OneToMany(cascade = CascadeType.ALL)
private List<Category> category;
...
然后是带有@Entity的category.java对象:
...
@OneToOne(cascade = CascadeType.ALL)
private Name name;
...
假设db如下所示(recipe_category表):
...
Recipe recipe = recipeRepository.findOne(recipeId);
Category ctg = categoryRepository.findOne(categoryId); // id=1
List<Category> categories = recipe.getCategory();
categories.add(ctg);
recipe.setCategory(categories);
recipeRepository.save(recipe);
...
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'UK_2n5xttsxwbyc6x67l0x8phfwn'
你们的关系不是一对多。您希望每个食谱都有多个类别。我想你也希望每个类别与多个食谱相关联。这是一种多对多的关系。您需要使用@manytomany
注释来配置实体。
还要注意,Hibernate关系总是单向的。当将@manytomany
注释放入recipe
类中时,可以访问与给定食谱关联的类别。为了访问反向关系,要获得给定类别的菜谱,还需要向category
类添加一个具有@manytomany
注释的适当属性。
我想您使用了hbm2ddl或类似的方法来自动创建表,由于表是为一对多关系创建的,因此会出现错误。更具体地说,在单向一对多关系中,联接表(recipe_category
表中的category_id
)中的反外键列定义了唯一约束。因此,使用该表模式,您不能将一个类别与一个以上的食谱相关联。
// Recipe
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="category_map", )
private List<Category> categories = new ArrayList<> ();
// Category
@ManyToMany(cascade=CascadeType.ALL, mappedBy="categories")
private Set<Recipe> recipes;
我有上面的错误。 首先,我试图完全理解它的意思。 下面是抛出错误的语句。
从这里开始,根据RDD/Spark DataFrame中的特定列从行中删除重复项,我们学习了如何根据一些特定变量删除重复的观察。如果我想以RDD的形式保存这些重复的观察结果,我该怎么做?我想如果RDD包含数十亿个观察值可能效率不高。那么除了使用之外,还有其他方法吗?
我有一个简单的Spring启动应用程序,它带有一个enpoint,通过JobLauncher bean中配置的SimpleAsynctaskeExecutor异步调用Spring批处理作业。 Spring批处理作业异步启动,工作正常,但没有任何内容保存到数据库中。 如果我删除SimpleAsyncTaskExecutor,数据就会保存。 这是我的批处理配置程序。我用SimpleAsyncTaskE
我在使用复合主键创建实体时遇到问题,该键也是外键。这是我的表和关系表原理图。当我想创建新闻实体时,我收到了带有null creatingnews的错误消息。新闻翻译有复合主键,外键引用到新闻表。 这是我的代码: 新闻聚合 新闻翻译 标签 新闻语言ID 在NewsFactory中,我希望使用NewsTranslation创建NewsAggregate,但有错误消息NullPointer。 新闻工厂
我购买了一张桌子,DDL为: Purchase表与purchaseproduct有一对多关系,purchaseproduct的DDL为: 以下是我的POJO: 购买:@Entity@Table(name=“Purchase”)@Access(AccessType.Property)公共类购买{private LongProperty IDPurchase;private StringPropert
我的数据库中有这些(简化的)表 我已经用这两个(简化的)类映射了表 公司 如果我注释第26、28、30和32行(上面标记的),同样的代码可以完美地工作。但我想知道为什么会产生异常。为什么是复制的钥匙? 提前谢了。