2015-10-21 39 views
0

我正在使用JPA,我想讓他新持久ID,但我不知道如何得到它。我能夠得到身份證,但我不顯示它,但我不知道如何獲得它的價值。獲取最新的持久ID,並將其返回

我有一個持續存在的這種方法:

public Artist createArtist(int id, String name, int genre) { 
     Artist artist = new Artist(id, name, genre); 
     em.persist(artist); 
     em.flush(); 

     System.out.println("Last ID: "+artist.getId()); 
     return artist; 
    } 

和代碼調用方法這幾行:

 EntityManagerFactory emf = Persistence.createEntityManagerFactory("JpaBasicsTutorial"); 
     EntityManager em = emf.createEntityManager(); 
     ArtistService service = new ArtistService(em); 
     Artist artista = new Artist(); 

     EntityTransaction transaction = em.getTransaction(); 
     transaction.begin(); 

     Artist artist = service.createArtist(artista.getId(),"Franz", 1); 
     System.out.println("Latest id: " +artista.getId()); // HOW TO GET ID HERE? 

     transaction.commit(); 
     System.out.println(String.format("Persisted: %s\n", artist)); 

這裏是生成ID代碼:

@Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 

    public Artist(int id, String name, int genre) { 
     this.name = name; 
     this.genre = genre; 
    } 

    public int getId() { 
     return id; 
    } 
+0

請爲您的藝術家實體顯示代碼。看起來你不會爲你的實體使用id生成策略,而是你手動設置它。 – Ish

+0

你想要最高的身份證號碼嗎?或者訪問或更新最後一條記錄? – markspace

+0

我實際上發現如何通過顯示它來獲取最新的id,就像你在上面的代碼中看到的一樣,但是我不知道如何返回它。 – Makudex

回答

1

您有2件物品 - 藝術家和藝術家。藝術家是堅持不懈的人。 artista對象沒有被保存,所以你將無法獲得它的ID。

你可能想改變這一行:

System.out.println("Latest id: " +artista.getId()); 

要這樣:

System.out.println("Latest id: " +artist.getId()); 

此外,實例藝術家對象時,你不用指定它的ID,根據您的映射,因爲這是自動生成的。

因此,即使沒有分配ID,此代碼也是可能的。

Artist artist = new Artist(); 
artist.setName(name); 
artist.setGenre(genre); 
em.persist(artist); 
+0

謝謝!這是我一直在尋找的。 :) – Makudex