Я разрабатываю пример веб-приложения с использованием сущностей JPA 2.0, Hibernate 3.6.2 и Spring 3. Пример содержит две таблицы в отношении «один к одному», родительская сущность - «Клиент», а дочерний - «Адрес». , PK в Address ссылается на таблицу Client (идентифицирующую связь).
Выполняя тесты JUnit, я заметил специфическую проблему с этими двумя сущностями, проблема в том, что дочерняя сущность сохраняется с (parentId + 1), мои отображения таковы:
@Entity
public class Client implements Serializable{
private Long clientId;
private Address address;
//Other fields
@Id
@GeneratedValue
public Long getClientId(){return this.clientId;}
public void setClientId(Long id){this.clientId=id;}
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="clientid",referencedColumnName="fk_clientid")
public Address getAddress(){return this.address;}
}
И дочерняя сущность:
@Entity
public class Address implements Serializable{
private Long fkClientId;
private Client client;
//Other fields
@Id
@GeneratedValue
public Long getFkClientId(){return this.fkClientId;}
public void setFkClientId(Long id){this.fkClientId=id;}
@OneToOne(mappedBy="address")
public Client getClient(){return this.client;}
}
В моих тестовых методах я связываю оба объекта, используя их установщики, но после сохранения сущностей и выполняю строку:
assertEquals(client.getClientId, client.getAddress().getFkClientId);
Тест не пройден за исключением
java.lang.AssertionError: expected:<654> but was:<655>
Я читал похожие вопросы и проблемы, но почти все они из JPA 1.0, предполагается, что в JPA2.0 общие ключи назначаются автоматически. Чего мне не хватает?