Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:一个实体类用于多种用途?_Java_Mysql_Spring_Hibernate - Fatal编程技术网

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;
    }