JPA自动建表字段缺失

我的作品组和作品是一对一的关系,请问为什么我的数据库里面,作品实体表里面没有作品组字段,这貌似也导致了我的findWorkByWorkGroup(WorkGroup workGroup)方法每次查找结果都为空值。

img

img

img

img

已解决。

  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,作品实体表缺少作品组字段,可能导致查找方法无法成功返回结果。针对这个问题,可以采取以下步骤解决:

    1. 首先确认作品组和作品之间的一对一关系确实在JPA实体类中建立了,对应字段添加了@OneToOne注解。
    2. 使用JPA自动建表时,会根据实体类中的注解自动在数据库中创建表结构。可以确认一下是否在作品实体表中存在作品组的字段。如果确实缺失,可以尝试以下两种解决方案。
    3. 方案1:找个不会重复的字段作为联合主键,在对应属性上添加@Id注解。如果实在没有可用的字段可以作为联合主键,可以考虑方案2。
    4. 方案2:在作品组和作品实体类中选择一个唯一不重复的字段,在对应属性上添加@Id注解。如果作品组和作品之间的一对一关系是通过作品表中的外键关联到作品组表的,还需要在作品表中对应的外键字段上添加@JoinColumn注解。
    5. 针对以上修改,需要在JPA实体类中进行相应的修改。下面给出一个示例代码,其中通过作品表中的外键关联到作品组表:

    作品组实体类Group:

    @Entity
    @Table(name = "group")
    public class Group {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        // 其他字段...
    }
    
    作品实体类Works
    
    @Entity
    @Table(name = "works")
    public class Works {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @OneToOne
        @JoinColumn(name = "group_id") 
        private Group group;
    
        // 其他字段...
    }
    

    以上代码将作品表中的外键组id映射到了Group实体类的id属性上,如果Group表中的id是自增长的,那么可以在Group实体类的id属性上添加@GeneratedValue注解来实现自动创建。