首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate更新实体最佳实践

Hibernate更新实体最佳实践
EN

Stack Overflow用户
提问于 2013-09-20 10:28:59
回答 1查看 832关注 0票数 1

我试图通过修改一个子实体(代理)来更新一个实体(客户端),但是存储库保存方法与create方法没有相同的行为。

当我通过提供一个新的代理id更新客户端时,不会加载代理。

有谁能解释一下为什么,怎么让这成为可能?

实体客户端:

代码语言:javascript
复制
@Entity
@Table(name = "client")
public class ClientEntity extends Serializable{

    private static final long serialVersionUID = -7451447955767820762L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(unique = true, nullable = false)
    private int reference;

    @ManyToOne
    @JoinColumn(name = "agence_id")
    private AgenceEntity agence;

    // getter/setter
}

实体机构:

代码语言:javascript
复制
@Entity
@Table(name = "agence")
public class AgenceEntity extends AbstractGenericEntity {

    private static final long serialVersionUID = -3674920581185152947L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(unique = true, nullable = false)
    private int id;

    @Column(nullable = false, length = 100)
    private String name;

    // getter/setter
}

表格代理:

代码语言:javascript
复制
Id     |  Name
  1    |    name1
  2    |    name2

表客户端:

代码语言:javascript
复制
Reference    |   agence_id
  1          |     1

创建客户端:OK

代码语言:javascript
复制
Agence agence = new Agence();
agence.setId(1); // load agence #1

Client client = new Client();
client.setAgence(agence);

client = clientRepository.save(client);
System.out.println(client.getReference); // print '2'
System.out.println(client.getAgence().getName()); // print 'name1'

更新客户端:NOK

代码语言:javascript
复制
Client client = clientRepository.findOne(1); // load client #1
Agence agence = new Agence();
agence.setId(2);
client.setAgence(agence); // update agence with agence #2
client = clientRepository.save(client);
System.out.println(client.getReference); // print '1'
System.out.println(client.getAgence().getName()); // print **NULL** !!!!
EN

回答 1

Stack Overflow用户

发布于 2013-09-20 10:34:12

您还没有在"NOK“代码段中将名称设置为”NOK“,因此它将打印null。

此外,您的主键(id)是用GeneratedValue注释的,因此您不应该调用setId --它是为您生成的,更改将导致不可预知的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18914530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档