在Spring Boot中初始保存后更新Hibernate Repository Entry

时间:2017-10-09 14:48:46

标签: java mysql spring hibernate spring-mvc

我试图在Spring Boot应用程序中通过Hibernate创建的MySQL数据库的条目基本上创建一个UPDATE语句,我还没有找到如何在这条路径中执行此操作通过谷歌搜索。

我有一个Entity,它在CrudRepository最初保存后会自动生成一个主键ID:

@Entity
@Table(name = "all_contacts")
public class Contact {


  private BigInteger userId;

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column( name="contactid")
  private BigInteger contactId;

  @NotNull
  private String name;

  private String imgPath;

   // getters and setters

}

以下是用作DAO的CRUDRepository

public interface ContactRepository extends CrudRepository<Contact, Long> { }

所以我想要的是当我在控制器中初始保存实体时,imgPath被留空了:

// within the controller
@Autowired
ContactRepository contactDAO;

public void saveContact(SomeDTO dto) {
   Contact contact = //... fields set and initialized
   contactDao.save(contact);
   BigInteger contactId = contact.getContactId();
   // do something here to save and set contact's imgPath in the DB
}

所以我想要做的是,现在已经生成了contactId字段。检索contactId并使用Hibernate执行基本上是UPDATE语句的操作,以便我可以将SQL列imgPath中的那一行设置为/savedir/contactImgId123456

所以,假设生成的contactID是:12345,基本上我试图执行的SQL语句将是: UPDATE all_contacts SET imgpath = '/savedir/contactImgId123456' WHERE contactid = 12345;

我不确定这是否可行,但如果可行,我该怎么做?

2 个答案:

答案 0 :(得分:1)

你可以两次保存。

首先:

contactDao.save(contact);

第二套图片路径:

contact.setImgpath('/savedir/contactImgId'+contact.getId());
 contactDao.save(contact);

答案 1 :(得分:0)

在春季启动时,您可以尝试弹簧数据jpa。 保存对象后,对象将保持状态。当您更新对象的属性时,如果会话未关闭,jpa或hibernate将自动更新数据库。因此,您可以在服务类中执行您想要的操作,并配置事务