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

如何解决(Java+Spring+JPA+Hibernate映射)关系

唐信瑞
2023-03-14
@Table(name = "Client")
@Entity
public class Client
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
    @GenericGenerator(name = "native", strategy = "native")
    private Long id;

    @OneToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST })
    @JoinColumn(name="country_id", unique = false, /*nullable = false,*/ insertable = true, updatable = false, foreignKey = @ForeignKey(name = "country_fk0"))
    private Country country;

    @OneToMany(cascade = { CascadeType.PERSIST }, orphanRemoval = true)
    @JoinColumn(name = "address_id",/* nullable = false,*/ foreignKey = @ForeignKey(name = "address_fk0"))
    private List<Address> address;

//GETTERS / SETTERS
}
@Table(name = "ProcessedClient")
@Entity
public class ProcessedClient
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
    @GenericGenerator(name = "native", strategy = "native")
    private Long id;

    @OneToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST })
    @JoinColumn(name="client_evaluation_id", unique = false, /*nullable = false,*/ insertable = true, updatable = false, foreignKey = @ForeignKey(name = "evaluation_fk0"))
    private ClientEvaluation evaluation;

    @OneToOne(cascade = { CascadeType.MERGE })
    @JoinColumn(name="country_id", unique = false, /*nullable = false,*/, foreignKey = @ForeignKey(name = "country_fk1"))
    private Country country;

    @OneToMany(cascade = { CascadeType.MERGE}, orphanRemoval = true)
    @JoinColumn(name = "address_id",/* nullable = false,*/ foreignKey = @ForeignKey(name = "address_fk2"))
    private List<Address> addresses;

//GETTERS / SETTERS
}
Country country = new Country();
country.setId(1l); // (DB ID)

// I do the same with addresses

ProcessedClient processedClient = new ProcessedClient();
processedClient.setAddresses(addresses);
processedClient.setCountry(country);

this.getDao().save(processedClient);

TransientPropertyValueException:对象引用未保存的瞬态实例-在刷新之前保存瞬态实例

THX

共有1个答案

莫泓
2023-03-14

来自文档:

Hibernate定义并支持以下对象状态:

  • transistance-如果一个对象刚刚使用new运算符实例化,并且它没有与Hibernate会话关联,那么它就是transistance。...
  • persistence-persistent实例在数据库中有一个表示形式和一个标识符值。
 类似资料:
  • 我有两个共享一个公共键的表。我想要的是,当我加载第一个表的类时,我还会得到对应于第二个表的类的列表,它们在第二个表中共享键。 更具体地说:tableA有一个id(id1),它存在于tableB的多个条目中。但是,tableB使用复合键并使用id1和id2作为键。 我想实现的是,当加载表A的POJO时,我还会得到表B的所有条目,其中表A中的id1等于表B中的id1。

  • 问题内容: 我的问题围绕着我想用JPA映射的以下结构: 我的POJO非常简单(没有复合类型等,只有一些原语)。 如何在链接的问题中实施建议?我该如何仅用部分进行注释(当我仅对字段进行注释时,会发生类转换错误,因为HashMap无法转换为Blob,这是问题的根源- 我不能仅对值部分进行注释地图)? 我不确定是否需要使包装类型实现实现可包装List的Serializable,还是仅使用ArrayLis

  • 如果在中只有一组,这将非常好地工作。ASSESSMENT_COMMENT只有两列: 它将完美地代表一对多的关系。 现在问题来了: 那么,1)这是Hibernate中已知的bug吗?2)有办法解决这个问题吗?我可以强制Hibernate创建两个映射表,每个映射表一个吗?请记住,我不能更改类来引用(业务逻辑需求)

  • 在Postgresql中,我有一个类型为BIT(1)的列。在JPA映射中,如下所示: 但是,当我执行测试时,出现了这个错误: 错误:列“type”的类型是bit,但表达式的类型是character变化  提示:您将需要重写或强制转换表达式。  排名:117 我尝试过其他Java类型:char、int、Boolean和bitset。但是,同样的错误发生了。 您知道如何将Postgresql类型位(1

  • 您好,我正在尝试在Hibernate4.0中使用注释进行一对一的关系,但我出现了这个错误。 我的代码是::- Hibernate控制文件

  • 主要内容:关联映射,反转,级联在前面的学习中,我们所涉及的都是基于单表的操作,但在实际的开发过程中,基本上都是同时对多张表的操作,且这些表都存在一定的关联关系。 Hibernate 是一款基于 ORM 设计思想的框架,它将关系型数据库中的表与我们 Java 实体类进行映射,表中的记录对应实体类的对象,而表中的字段对应着实体类中的属性。Hibernate 进行增删改查等操作时,不再直接操作数据库表,而是对与之对应的实体类对象进行