2016-04-07 2 views
0

Я developping веб-приложение (Spring J2EE/angularjs)Spring: проблема с OneToOne отношений

Я хочу, чтобы установить связь между двумя объектами:
гражданина (идентификатор, LastName, город)
город (ид , cityName)

Гражданин живет только в одном городе.

Мне нужно найти город от гражданина. Мне не нужно найти гражданина из города.

Я сделал это:

@Entity 
@Table(name = "citizen") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class Citizen implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "last_name") 
    private String lastName; 

    @OneToOne 
    private City city; 
} 



@Entity 
@Table(name = "city") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class City implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "city_name") 
    private String cityName; 
} 

В базе данных я вставил данные. Гражданин 1, 2 и 3 связаны с городом 1 и гражданина 4 связан с городом 2

Когда я пытаюсь загрузить все гражданин, я получаю сообщение об ошибке: было обнаружено более одной строки с данным идентификатором: 1, для класса: com.myApp.rh.domain.Citizen

Что не так в моих сущностях?

Благодаря

+0

Поскольку один '' международное может иметь много 'Citizen', пожалуйста, измените его на' ManyToOne' вместо 'OneToOne' на' частный город города; 'и попробовать. Также вы можете показать свою логику, чтобы загрузить всех граждан, которых вы используете? –

ответ

0

кажется, что вам не хватает @JoinColumn аннотацию в вашей Citizen лица.

@Entity 
@Table(name = "citizen") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class Citizen implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "last_name") 
    private String lastName; 

    @OneToOne 
    @JoinColumn(name = "id", unique = true) 
    private City city; 
} 



@Entity 
@Table(name = "city") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class City implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "city_name") 
    private String cityName; 
} 
Смежные вопросы