当前位置: 首页 > 知识库问答 >
问题:

Hibernate/jpa-一个主键父级到复合键子级

郦何平
2023-03-14

在我的jpa映射中,我试图将带有一个主键的父类映射到带有复合键的子类,但似乎插入了错误的表,它已经生成了2个表,但不幸的是我没有绑定外键(policy_value_summary_id)

@Entity
@Table(name = "POLICY_VALUE_SUMMARY")
public class PolicyValueSummary {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="POLICY_VALUE_SUMMARY_ID")
    private Long policyValueSummaryId;

    @MapsId("policyValueSummaryId")
    @OneToMany
    private Set<PolicyValue> policyValues;
}
@Entity
@Table(name = "POLICY_VALUE")
public class PolicyValue {

    @EmbeddedId
    @AttributeOverrides({
            @AttributeOverride(name = "policyValueSummaryId", column = @Column(name = "POLICY_VALUE_SUMMARY_ID")),
            @AttributeOverride(name = "planAtrId", column = @Column(name = "PLAN_ATR_ID")) })
    private PolicyValuePk policyValuePk;

}
@Embeddable
public class PolicyValuePk implements Serializable {

    private Long policyValueSummaryId;

    private Long planAtrId;
}

我试图用策略值(子类)保存策略摘要值(父),如下所示

        PolicyValuePk pk = new PolicyValuePk();
        pk.setPlanAtrId(Long.valueOf("1"));

        Set<PolicyValue> policyValues = new HashSet<>();
        policyValues.add(new PolicyValue(pk));

        PolicyValueSummary summary = new PolicyValueSummary();
        summary.setPolicyValues(policyValues);

        repo.save(summary);

下面是输出给我的错误

Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into policy_value_summary (policy_value_summary_id) values (?)
Hibernate: insert into policy_value_summary_policy_values (policy_value_summary_policy_value_summary_id, policy_values_plan_atr_id, policy_values_policy_value_summary_id) values (?, ?, ?)
WARN 6880 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 972, SQLState: 42000
ERROR 6880 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : ORA-00972: identifier is too long

共有1个答案

陶星辰
2023-03-14

否,在Oracle版本12.2之前,标识符的长度不允许超过30个字符。参阅文件

http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements008.htm#SQLRF00223

但是从版本12.2开始,它们的长度可以达到128字节

 类似资料:
  • 我有一个复合主键,其中一个键为空。实体中必须存在哪些注释,以便我可以使用此类JPA获取数据: 我尝试使用IdClass Annotation和EmbeddedId Annotation,但出现异常: 例如,使用了数据,但在实际项目中使用了类似的数据,因此无法用值替换null。

  • 问题内容: 我的JPA模型中有以下类(省略了getters,setters和无关字段): 我需要定义一个类,使得当从所述类生成DDL时,相应的表的主键被由密钥和。我尝试了以下方法: 但这会为表生成以下内容: 请注意,和都是可为空的,当我尝试将DDL加载到SQL Server时会导致以下错误 无法在表“ PRICE”中的可为空的列上定义PRIMARY KEY约束 我不明白为什么这些可以为空,因为在域

  • 我在使用复合主键的hibernate实体集时遇到了问题。 我们的应用程序中有一个概念“Target”。目标id应该是其他三个表(实体)主id的组合。目标也有一个int标记。员工应该有一系列目标。SQL如下所示: 这个SQL工作正常,它允许我每个role_id(员工)多个目标,只要应用程序和项目分类不同。 这是目标ID类 这是目标类 这是employee类,我想在其中为每个员工存储一组目标。 通过h

  • 我有2个实体类:Student是父类,Address是子类,具有一对一映射: student_id int(pk),roll_no int(pk),name varchar student_id(pk,fk),国家/地区varchar address实体中的student_id既是主键也是外键 学生实体类: 异常为-org.hibernate.AnnotationException:@mapsid

  • 问题内容: 我有一个关于从子实体ir引用ParentEntities的问题,如果我有这样的事情: Parent.java: 和Child.java: 将创建以下表: 好的,到目前为止,一切都很好。但是,当涉及到使用Java的Reference时,我想,您可以做这样的事情。 这导致在数据库中: 但是事实并非如此,您必须明确地将“父级”设置为“子级”(我认为框架可能可以单独执行)。 因此,数据库中真正

  • 问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f