我的數據庫由兩個表組成:Organisation
和User
,關係爲ManyToOne
,組織可以容納多個用戶。休眠中的外鍵共享
之前,我分享我的問題,這裏有我的實體:
@Entity
@Table(name = "organisation")
public class OrganisationEntity {
@Id
@Column(name = "orga_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String name;
// Getters & Setters
}
-
@Entity
@Table(name = "\"user\"")
public class UserEntity {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String email;
@NotNull
private String firstName;
@NotNull
private String lastName;
@NotNull
private String password;
@ManyToOne(targetEntity = OrganisationEntity.class,cascade = CascadeType.ALL)
@JoinColumn(name = "orga_id")
private OrganisationEntity organisation;
// Getters & Setters
}
這裏是我的問題,當兩個用戶分配一個組織與相同名字,說組織在具有2個不同ID的Organisation
表中創建兩次。如果組織的ID已經存在,我希望將其分配給新用戶。
因此,如果用戶U1 & U2是使用名爲O1的組織創建的,則兩者都應該具有相同的orga_id
,並且只應在數據庫中創建一個組織條目。
這怎麼能實現?我對Hibernate
的理解有什麼缺失?
根據要求,這裏是我的服務,在用戶登記時創建UserEntity
:
@Override
public UserInfo createUser(UserInfo newUser) {
return mapper.map(userDao.save(mapper.map(newUser)));
}
我Mapstruct
對象映射到UserEntity
,並以將其保存在發送給我的DAO
我數據庫。
能否請您張貼創建/更新實體以及代碼? –
我已經添加了我的服務,請讓我知道如果這還不夠。 – Christopher
您提到您將兩個用戶分配給具有「相同」名稱的組織,這導致我相信您正在創建兩個Organization實例,並且您提供的名稱相同,但不會以任何方式告訴hibernate他們實際上是同一個組織。您應該實例化1個組織並將其分配給兩個用戶。你可以在創建OrganizationEntity和UserEntity的地方發佈代碼嗎? –