java - 使用注释一对多不添加列(hibernate)

标签 java hibernate servlets dao

抱歉我的英语不好。我有 2 个表 - 帖子(id,namePost,Text,idCat)和类别(id,nameCat)。我使用 hibernate 和模式 DAO。我在表 CategoryCategoryId -> 到 Posts idCat 中创建一对多。链接王的作品,输出信息不错。但是当我在表 Posts 中添加信息时,idCat 列没有添加,它在数据库中什么也没有包含。我无法在帖子表中添加此列(idCat)。我尝试做了很多次,但没有成功(

类别

    @Entity
    @Table(name="CATEGORY")
    public class Category {

        @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name = "ID", insertable=false, nullable=false)
        private int id;

        @Column(name="NAMECAT") 
        private String nameCat;

        @Column(name="INDEX") 
        private boolean index;

        @OneToMany(cascade = CascadeType.ALL, mappedBy = "category")
        private Set<Posts> post;
//then get and set

帖子

    @Id @GeneratedValue
    @Column(name = "ID", unique = true, nullable = false)
    private int id;

    @Column(name="NAMEPOST", nullable = false) 
    private String namePost;

    @Column(name="TEXT", nullable = false) 
    private String text;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "IDCAT", insertable=false, updatable=false)
    private Category category;
//code

界面 PostDao

public interface PostDao {
   public void addPost(Posts post);
}

这是servlet

String[] catarrayid = request.getParameterValues("eachcat");//get cat what user use
   String textpost = request.getParameter("textpost"); //text post
   String namepost = request.getParameter("namepost"); //name post

   if(!textpost.isEmpty() && !namepost.isEmpty() && catarrayid!=null) {
    //open session              
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
                    session.beginTransaction();

    Posts post = new Posts();
    //this value take id category               
    int id = 0;
    for(String s : catarrayid) {
    //get id
        id = Integer.parseInt(s);
    }

    //create post object 
    post.setnamePost(namepost);
    post.setText(textpost);
    //this i add in table post value idCat              
    //how add in object post category id?
    //post.add(???);

    try{
    //and i add, bellow add method
        Factory.getInstance().getPostDAO().addPost(post);
        response.sendRedirect("indexadmin");
    }catch(Exception e) {
                        System.out.println(e);
                    }finally{
                        if(session!=null && session.isOpen())
                            session.close();
                    }

像这样我添加方法

public void addPost(Posts post) {
        Session session = null;
        try{
            session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            session.save(post);
            session.getTransaction().commit();

        } catch(Exception e) { outputError("addPost", e);
        } finally{ closeSession(session); }
    }

最佳答案

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "IDCAT", insertable=false, updatable=false)
    private Category category;

为什么你有 insertable=false ?这基本上表明 Post 实体不负责 Category 实体上的插入操作。尝试删除 insertable=false 或将其更改为 insertable=true (我认为这是默认情况)。

关于java - 使用注释一对多不添加列(hibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330336/

相关文章:

java - 我可以在 Java 中将 ArrayList<HashMap> 类型转换为 List<Map> 吗?

java - 在创建可执行 jar 时指定 JVM 参数(而不是在执行 jar 时)

java - 如何动态设置 setContentType ("text/html") 或 setContentType ("text/plain")

java - Hibernate - java.time.LocalDate 无法转换为 java.util.Date

Java:使用过滤器(用户已登录/用户未登录)

java - Eclipse:Tomcat Servlet 中的 Thrift,ClassNotFoundException TException

java - 我的 TestCircle java 代码运行不正确

java - 使用 bean 定义配置文件的 Spring 3.1 bean 可见性

java - hibernate 中具有自定义实体的多对多 - 级联无法正常工作

java - @transaction - 回滚失败