Spring Data JPA insertion au lieu de la mise à Jour
Salut, je suis nouveau sur Brin de Données JPA et je me demande même si je passe l'Id de l'entité, le Printemps de données jpa est l'insertion au lieu de fusionner. J'ai pensé lorsque je mettre en œuvre le Permanent de l'interface et de mettre en œuvre deux méthodes:
public Long getId();
public Boolean isNew();
Il va fusionner automatiquement au lieu de persister.
J'ai une classe d'entité Utilisateur appelé comme:
@Entity
@Table(name = "T_USER")
public class User implements Serializable, Persistable<Long> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "USER_ID")
private Long id;
@Column(name = "CREATION_TIME", nullable = false)
private Date creationTime;
@Column(name = "FIRST_NAME", nullable = false)
private String firstName;
@Column(name = "LAST_NAME", nullable = false)
private String lastName;
@Column(name = "MODIFICATION_TIME", nullable = false)
private Date modificationTime;
Et une autre classe
@Entity
@Table(name = "T_USER_ROLE")
public class UserRole implements Serializable, Persistable<Long> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long roleId;
@Column(name = "ROLE_NAME")
private String userRole;
}
J'ai un dépôt personnalisée appelé UserRepostory l'extension de JpaReopistory. Je suis frapper l'enregistrer pour la fusion et de persister comme je le vois à la mise en œuvre de démontrer que Spring Data Jpa utilise deux méthodes pour mettre à jour ou insérer.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
J'ai essayé de comprendre mais n'a pas obtenu la moindre idée. Peut-être que vous
gars peut vous aider.
save
et de Données du Printemps s'en chargera pour vous.OriginalL'auteur Rossi Robinsion | 2014-12-28
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur cette question, a essayé de mettre en œuvre
Persistable
en vain, et se sont ensuite penchés sur le Printemps de Données JPA source. Je n'ai pas forcément le voir dans l'exemple de code, mais j'ai un@Version
champ dans mon entité. Si il y a un@Version
champ de Données du Printemps permettra de tester que valeur de déterminer si l'entité est nouveau ou pas. Si le@Version
champ n'est pas un primitif et est null, alors l'entité est considérée comme une nouvelle.Cela me jeta un long moment, dans mes tests, car je n'étais pas le réglage de la version de champ dans ma représentation, mais seulement sur la persisté entité. Aussi, je ne vois pas ce documentée dans la cas contraire utile de Données du Printemps docs (qui est un autre problème...).
Espère que ça aide quelqu'un!
J'ai exactement le même problème et n'est pas pour @Version annotations...
Merci pour cette réponse, je suis tombé sur le même problème!
En ce qui concerne la question avec
@Version
, j'ai eu le temps que par l'ajout de la Java de Validation@Null
annotation, l'affectation d'une faible valeur par défaut pour le champ version, et la suppression de la définition pour la version de champ. De cette façon, le champ n'est jamais nulle. Je suis en utilisant un Instant de classe comme le@Version
champ.OriginalL'auteur John Shields
Par défaut, Spring Data JPA inspecte la propriété de l'identifiant de l'entité. Si la propriété de l'identifiant est
null
, l'entité sera considéré comme nouveau, sinon que pas de nouvelles. C'estId-Property inspection
RéférenceSi vous êtes à l'aide de Spring JPA avec
EntityManeger
appel.merge()
mise à jour de votre entuty et.persist()
va insérer.Il n'est pas nécessaire de mettre en œuvre la
Persistable
interface.Comme je l'ai dit, je suis dans Spring Data Jpa et déjà utilisé propres dao couches. J'ai fait la façon dont vous mentionné ci-dessus en passant l'entityManager dans dao mise en œuvre. Qui fonctionne bien, mais ma question est de savoir pourquoi cela ne fonctionne pas dans le contexte de Spring data Jpa.
OriginalL'auteur njjnex