2012-12-16 4 views
9

Ho un'entità semplice. Sto usando spring-data-jpa versione 1.2.0.RELEASE e eclipselink 2.4.1.Perché l'ID non è impostato nell'entità restituita da spring-data-jpa save

@Entity 
@Table(name="platform") 
public class Platform { 

    @Id 
    @Column(name="id", nullable=false, updatable=false, insertable=true) 
    private Long id; 
    // etc. 
} 

Voglio salvarlo. Il mio repository sembra

public interface PlatformRepository extends JpaRepository<Platform, Long> { 

    Platform findByName(String name); 
} 

mio controller è molto semplice con questo metodo

@RequestMapping(method=RequestMethod.POST, produces="application/json") 
public Platform post(Platform platform) { 
    Platform result = platformDao.saveAndFlush(platform); 
    return result; 
} 

E la risposta da quel metodo è

{"platform":{"id":null,"name":"Test1"}} 

Select * from piattaforma dimostra che Test1 ha un ID di 6. La tabella è definita come:

create table platform(
id int not null auto_increment primary key, 
name varchar(128) not null); 

Mi aspetto che l'ID venga impostato dopo il salvataggio, ma non lo è. Non si aspettano che faccia una ricerca subito dopo aver scritto l'entità, giusto?

+0

Solo un'ipotesi: prova a cambiare 'id' da' Long' a 'int' e' insertable = true' a 'false'. Inoltre, [* questo *] (http://stackoverflow.com/questions/12122489/jparepository-transaction-and-repository-saveandflush) potrebbe essere rilevante. – alfasin

risposta

13

Non è stato specificato che l'ID è stato generato automaticamente dal database nella mappatura. Aggiungi

@GeneratedValue(strategy = GenerationType.IDENTITY) 

nel campo ID. Senza di esso, JPA non sa che deve eseguire un'istruzione select dopo l'inserimento per ottenere l'ID generato dal database.

+0

Duh ... lo sapevo. Lo accetterò non appena lo convaliderò. – digitaljoel

Problemi correlati