2014-09-29 1 views
1

Я бегу JPA проекта весной и я следующий класс, содержащий @ManyToOne соотношения:JPA @ManyToOne создает составной первичный ключ вместо @id

package ba.fit.vms.pojo; 

    import java.io.Serializable; 
    import java.util.Date; 

    import javax.persistence.CascadeType; 
    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.FetchType; 
    import javax.persistence.GeneratedValue; 
    import javax.persistence.GenerationType; 
    import javax.persistence.Id; 
    import javax.persistence.JoinColumn; 
    import javax.persistence.ManyToOne; 
    import javax.persistence.Table; 
    import javax.validation.constraints.NotNull; 

    import org.springframework.format.annotation.DateTimeFormat; 

    @Entity 
    @Table(name="korisnik_vozilo") 
    public class KorisnikVozilo implements Serializable{ 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 

     @Id 
     @GeneratedValue(strategy=GenerationType.AUTO) 
     @Column(name="id") 
     private Long id; 

     @ManyToOne(cascade = {CascadeType.REFRESH}, fetch=FetchType.EAGER) 
     @JoinColumn(nullable=false, updatable=false) 
     private Vozilo vozilo; 

     @ManyToOne(cascade = {CascadeType.REFRESH}, fetch=FetchType.EAGER) 
     @JoinColumn(nullable=false, updatable=false) 
     private Korisnik korisnik; 

     @Column(name = "dodijeljeno") 
     @DateTimeFormat(pattern = "yyyy-MM-dd") 
     @NotNull 
     private Date dodijeljeno; 

     @Column(name = "vraceno") 
     @DateTimeFormat(pattern = "yyyy-MM-dd") 
     private Date vraceno; 

     ... 

    } 

По какой-то причине, начиная с сервера, этот код создает составной первичный key (korisnik_id, vozilo_vin), вместо @Id определенного первичного ключа. Вот скриншот таблицы: table view Может кто-нибудь объяснить мне, что я сделал неправильно и как написать этот код, поэтому я не получаю этот составной ключ в базе данных, а тот, который задан в классе.

Он даже устанавливает автоинкремент на korisnik_id!

+0

оффтоп комментарий: общая хорошая практика не называть поля и классы на вашем родном языке – Bozho

+0

что ваша реализация JPA/ – Bozho

+0

Я использую Spring петли для реализации JPA Spring данных ** hibenate ** MySQL – Blejzer

ответ

0

Вы можете проверить, как вы можете использовать @JoinColumn, чтобы решить вашу проблему.

+0

Любые ссылки или предложения? – Blejzer

+0

http://viralpatel.net/blogs/hibernate-one-to-many-annotation-tutorial/ проверьте это, также ссылка на спящий режим объясняет все аннотации с примером очень красиво http://docs.jboss.org/hibernate/orm/ 4.3/manual/en-US/html/ch07.html # example.collection.mapping.annotations – varun

1

Постарайтесь избавиться от updatable=false. будучи неоплачиваемым, эти два столбца могут рассматриваться как неизменяемые личности объекта.

+0

Удалили, удалили таблицу, сохранили класс и перезапустили сервер. К сожалению, такой же результат. – Blejzer