我试图在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;
我不确定这是否可行,但如果可行,我该怎么做?
答案 0 :(得分:1)
你可以两次保存。
首先:
contactDao.save(contact);
第二套图片路径:
contact.setImgpath('/savedir/contactImgId'+contact.getId());
contactDao.save(contact);
答案 1 :(得分:0)
在春季启动时,您可以尝试弹簧数据jpa。 保存对象后,对象将保持状态。当您更新对象的属性时,如果会话未关闭,jpa或hibernate将自动更新数据库。因此,您可以在服务类中执行您想要的操作,并配置事务