2017-10-09 48 views
0

我試圖基本上創建一個UPDATE語句對我的MySQL數據庫通過Hibernate在Spring Boot應用程序中創建的條目,我一直沒能找到如何通過谷歌搜索在這條路線上做到這一點。在Spring Boot初始保存後更新Hibernate存儲庫條目

我曾經它最初由其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;

我不知道這是否可行,但如果是這樣,我該怎麼做?

回答

1

你可以做兩次保存。

第一:

contactDao.save(contact); 

第二組圖片路徑:

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

哦,太棒了!我查看了更多,並在完成後更新,這與使用findOne()方法類似,比如'Contact oldContact = findOne(12345)',是否正確?那麼,在對象關閉之前,事務還沒有真正完成嗎? – NateH06

0

春天開機,你可以試試彈簧數據的JPA。 保存對象後,該對象將保持狀態。更新對象的屬性時,如果會話未關閉,jpa或hibernate將自動更新數據庫。所以,你可以做你想要的服務類,並配置交易

+0

請包含演示您正在嘗試解決的問題的代碼片段。 –

相關問題