Мне нужна ваша помощь, потому что я не могу понять, в чем дело, и это меня раздражает. Я создаю две таблицы с взаимно-однозначным отношением по liquibase:
<changeSet id="create user_profile_info table" author="aarexer">
<createTable tableName="user_profile_info">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="user_id" type="BIGINT"/>
</createTable>
</changeSet>
<changeSet id="create users table" author="aarexer">
<createTable tableName="users">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
</createTable>
<addForeignKeyConstraint baseColumnNames="id"
baseTableName="users"
constraintName="fk_user_to_user_profile"
referencedColumnNames="user_id"
referencedTableName="user_profile_info"/>
</changeSet>
И пишу для него Java-сущности сэто отношение, это UserProfileInfo
:
@Data
@Entity
@Table(name = "user_profile_info")
public class UserProfileInfo implements Serializable {
@Id
@GenericGenerator(name = "native", strategy = "native")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
private Long id;
public UserProfileInfo() {
}
public UserProfileInfo(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
И это User
сущность:
@Data
@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
@GenericGenerator(name = "native", strategy = "native")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id", referencedColumnName = "user_id")
private UserProfileInfo userProfileInfo;
// Hibernate requires a no-arg constructor
public User() {
}
public User(String firstName) {
this.firstName = firstName;
}
}
Это одна направленная ссылка, от User до UserProfile.
На первый взгляд все хорошо, но когда я пытаюсь сохранить его:
UserProfileInfo entity = new UserProfileInfo("98518872");
User user = new User("Aleksandr");
user.setUserProfileInfo(entity);
userRepository.save(user);
Я вижу Referential integrity constraint violation
причина ошибки fk_user_to_user_profile
.
Что не так?
Я создаю объекты user и user_info, связываю их с помощью сеттеров и получаю граф объектов.И я не могу сохранить свой график.
Я думаю, что это может быть ошибка в addForeignKeyConstraint, потому что, когда я удаляю это ограничение, оно работает (и это понятно), но как я должен сохранять объекты с ограничениями на таблицы?
Пожалуйста, помогите мне понять мою ошибку.