2013-02-18 2 views
0

У меня проблема, когда Hibernate сбрасывает идентификаторы для объектов, хотя я их явно устанавливаю.Hibernate устанавливает ID в нуль

Вот мои две сущности:

@Entity 
@Table(name="game") 
public class Game implements Serializable { 

    private String token; 

    private Set<DealersCard> dealersCards; 

    @Id 
    @Size(min=36, max=36) 
    @Column(name="token") 
    public String getToken() { 
     return token; 
    } 

    public void setToken(String token) { 
     this.token = token; 
    } 


    @OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL}) 
    public Set<DealersCard> getDealersCards() { 
     return dealersCards; 
    } 

    public void setDealersCards(Set<DealersCard> dealersCards) { 
     this.dealersCards = dealersCards; 
    } 

} 

и

@Entity 
@Table(name="dealers_card") 
public class DealersCard implements Serializable { 

    private String token; 
    private int id; 

    public void setVisible(boolean visible) { 
     this.visible = visible; 
    } 

    @ManyToOne 
    @MapsId("token") 
    @JoinColumn(name="token", referencedColumnName="token") 
    public Game getGame() { 
     return game; 
    } 

    public void setGame(Game game) { 
     this.game = game; 
    } 

    @Id 
    @Size(min = 36, max = 36) 
    public String getToken() { 
     return token; 
    } 

    public void setToken(String token) { 
     this.token = token; 
    } 

    @Id 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

Когда я создаю экземпляр игры с двумя DealersCard присвоенного через EntityManager :: сохраняются объекты создаются в базе данных правильно и я могу получить их позже, но если я извлечу экземпляр игры, добавьте еще один экземпляр DealersCard и попытайтесь обновить базу данных с помощью EntityManager :: merge, Hibernate, по какой-либо причине, установите поле токена равным null, а id - 0 и Я получаю

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: ERROR: null value in column "token" violates not-null constraint Detail: Failing row contains (null, 0).

Я пробовал MySQL и PostgreSQL, но я все еще сталкиваюсь с той же ошибкой. Я запускаю Glassfish 3.1.2.2, Hibernate Entity Manager 4.1.2, Java EE 6.

Любая помощь приветствуется.

Спасибо!

ответ

3

Я не уверен, что ваши сопоставления вполне правильны. Вы, вероятно, следует:

@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL}, mappedBy = "game") 
private Set<DealersCard> 

и на многих сторон:

@ManyToOne 
@JoinColumn(name="token") 
private Game game; 

Затем удалить маркер поля из многих сторон и просто целое число, которое является вашим @Id.

Убедитесь, что когда вы добавляете новые карты дилера в свой набор, который вы задаете для каждой игры, а также добавляете их в коллекцию.

+0

Вы были абсолютно правы - проблема была в сопоставлениях. Благодаря! – Martynas

Смежные вопросы