Java Hibernate:一个实体类用于多种用途?
我有一个名为Java Hibernate:一个实体类用于多种用途?,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,我有一个名为Category的实体类。我以前使用它与另一个实体连接。现在我必须使用相同的Category实体将数据插入Category表中 Category.java 问题是我必须在category实体中设置parent\u category\u id,以便将数据保存到category表中,但之前我用于连接表的列是哪一列 桌子 我可以设置所有值,例如,categoryId、categoryName、createdDate、,LastUpdateDate位于类别实体中,而不是父类别id,我无法创
Category
的实体类。我以前使用它与另一个实体连接。现在我必须使用相同的Category
实体将数据插入Category
表中
Category.java
问题是我必须在category
实体中设置parent\u category\u id
,以便将数据保存到category
表中,但之前我用于连接表的列是哪一列
桌子
我可以设置所有值,例如,categoryId、categoryName、createdDate、,LastUpdateDate
位于类别
实体中,而不是父类别id
,我无法创建它的getter和setter。当我尝试创建它时,它显示已使用的错误父类别id
列名。此错误的原因是我已将其用于加入
请帮助我使用相同的实体进行插入,或者告诉我
需要为我感觉不到的事物创建一个单独的实体
合适吗
用户请求示例:
从dao中查找父类别实体,然后使用setter设置父类别,而不是试图设置父类别id。例如
Category parentCategory = adminServiceDao.findCategory(Integer.parseInt(createCategoryRequest.getMainCategory());
category.setParentCategory(parentCategory);
如果我对你的理解是正确的,那你就错了。在hibernate中,正确的方法是读取父类别,并使用其ID(本例中为
1
)拥有一个持久化父类别对象,然后将您试图持久化的该类别设置为parentCategory.setParentCategory(Category)
你能分享确切的堆栈跟踪吗?堆栈跟踪中没有太多内容。我已经使用(
@JoinColumn(name=“parent\u category\u id”)
)进行了连接,并且不能通过像这样使用parent\u category\u id
来再次声明属性@Column(name=“parent\u category\u id”)private int parentCatId
所以你现在想存储一个类别
而没有父或子类别
?我必须使用相同的实体类
在表中插入记录,例如,(15,Cricket,12015-1-12015-1-1)
。查看我的表中的列。你的意思是什么parent\u category\u id
是我的category
表中应该设置和插入的列。当使用hibernate时,不能以您尝试的方式设置id。在实体之间建立关系,hibernate负责设置适当的ID。在您的示例中,在同一个表中定义了一个ManyToOne,因此,建立关系的方法是先查找父对象,然后在子对象上设置父对象。请参阅我的用户请求,其中包含parentCategoryId
我如何插入不是自动生成的parentCategoryId
?好的,您想说我应该查找parentCategoryId
,而不是尝试要插入从用户请求获取的值?要使此映射处理您提到的数据,您必须创建父类别(如果不存在)。换句话说,考虑到数据库中的记录,此操作完成后,您将拥有两条记录,一条记录类别15,另一条记录类别cricket。请参阅我的用户请求,其中包含parentCategoryId
我如何插入不是自动生成的parentCategoryId
?好的,您是否尝试说我应该找到parentCategoryId
插入从用户请求获取的值?您混合了基于JDBC的方法和基于ORM的方法。在ORM中,您考虑关系。是的,获取父对象,然后将子对象持久化为关系父对象。这可能是标准方法。但是,我有需要插入的所有信息。那么为什么我必须再次获取它?我是否可以直接设置和插入,而无需find
parentCatogry?
@Transactional
public UserResponse createCategory(SubmitReviewRequest createCategoryRequest) throws SQLException, ClassNotFoundException, IOException {
Category category = new Category();
UserResponse userResponse = new UserResponse();
if (createCategoryRequest != null) {
category.setCategoryName(createCategoryRequest.getSubCategory());
// category.setParenCategoryId(Integer.parseInt(createCategoryRequest.getMainCategory()));
int id = adminServiceDao.saveCategory(category);
userResponse.setCode(WeekenterConstants.SUCCESS_CODE);
userResponse.setMessage("Success");
userResponse.setId(id);
}
return userResponse;
}
{
"categoryName":"cricket",
"parentCategoryId":15
}
Category parentCategory = adminServiceDao.findCategory(Integer.parseInt(createCategoryRequest.getMainCategory());
category.setParentCategory(parentCategory);
@Transactional
public UserResponse createCategory(SubmitReviewRequest createCategoryRequest) throws SQLException, ClassNotFoundException, IOException {
Category category = new Category();
// read parent
Category parentCategory = adminServiceDao.find(Integer.parseInt(createCategoryRequest.getMainCategory()));
UserResponse userResponse = new UserResponse();
if (createCategoryRequest != null) {
category.setCategoryName(createCategoryRequest.getSubCategory());
// category.setParenCategoryId(Integer.parseInt(createCategoryRequest.getMainCategory()));
//set the child relationship.
category.setParentCategory(parentCategory);
int id = adminServiceDao.saveCategory(parentCategory);
userResponse.setCode(WeekenterConstants.SUCCESS_CODE);
userResponse.setMessage("Success");
userResponse.setId(id);
}
return userResponse;
}