J'essaye de créer essentiellement une instruction UPDATE
sur une entrée de ma base de données MySQL créée via Hibernate dans une application Spring Boot, et je n'ai pas réussi à trouver comment faites ceci dans cette route par des recherches de google.Mise à jour d'une entrée de référentiel Hibernate après l'enregistrement initial dans Spring Boot
J'ai une entité qui génère un ID de clé primaire automatiquement une fois qu'il est d'abord sauvé par son CrudRepository:
@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
}
Voici son CRUDRepository
utilisé comme DAO:
public interface ContactRepository extends CrudRepository<Contact, Long> { }
Alors ce que je want est imgPath est laissé vide lorsque je fais la sauvegarde initiale de l'entité dans le contrôleur:
// 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
}
Donc ce que je veux faire, c'est maintenant que le champ contactId
a été généré. Est récupérer le contactId
et utiliser Hibernate pour réaliser ce qui serait essentiellement une déclaration UPDATE
afin que je puisse mettre cette ligne dans la colonne SQL imgPath
à quelque chose comme /savedir/contactImgId123456
Alors, dites le contactID
généré était: 12 345, essentiellement l'instruction SQL J'essaye alors d'exécuter serait: UPDATE all_contacts SET imgpath = '/savedir/contactImgId123456' WHERE contactid = 12345;
Je ne sais pas si c'est faisable, mais si c'est le cas, comment ferais-je cela?
Oh sympa! J'ai regardé autour de plus, et mettre à jour ceci après avoir dit que cela a été fait, ce serait similaire à l'utilisation de la méthode findOne(), comme 'Contact oldContact = findOne (12345)', correct? Donc, est-ce que la transaction n'est pas vraiment engagée jusqu'à ce que l'objet soit fermé ou quelque chose? – NateH06