如何定义Java中的模型和数据库之间的关系?
我有三个模型(即Users、UsersImages、UserLocation),数据库中有三个对应的表。我将用户作为所有者实体,因为如果用户在那里,那么只有其图像和位置是可能的,因此定义了这种关系 我有两个疑问:如何定义Java中的模型和数据库之间的关系?,java,database,spring-boot,hibernate,spring-data-jpa,Java,Database,Spring Boot,Hibernate,Spring Data Jpa,我有三个模型(即Users、UsersImages、UserLocation),数据库中有三个对应的表。我将用户作为所有者实体,因为如果用户在那里,那么只有其图像和位置是可能的,因此定义了这种关系 我有两个疑问: 如果这是正确的想法,并使业主实体?如果是, 我在类UserImages中没有任何userId,但是有Users类的引用,因此如何基于userId添加、更新或删除UserImages 如果这是错误的,那么建立这三个模型之间关系的正确方法是什么 谁能帮我澄清这个疑问 谢谢。如果这是正确的想
UserImages
中没有任何userId
,但是有Users
类的引用,那么如何基于userId
添加、更新或删除UserImages
由于您在UserImages
中有Users
的引用,因此可以通过Users
本身获得UserImages
<代码>休眠将为您执行此操作。如果您仍然希望通过userId
获取userImages
,也可以通过users.getId()
-获取userId
Spring数据
将自动为您提供这些方法-
public interface UserImagesRepository extends CrudRepository<UserImages, Long> {
UserImages findById(long id);
}
1.如果这是正确的想法,并使业主实体?
是的,你的方法是正确的
2.我在类UserImages
中没有任何userId
,但是有Users
类的引用,那么如何基于userId
添加、更新或删除UserImages
由于您在UserImages
中有Users
的引用,因此可以通过Users
本身获得UserImages
<代码>休眠将为您执行此操作。如果您仍然希望通过userId
获取userImages
,也可以通过users.getId()
-获取userId
Spring数据
将自动为您提供这些方法-
public interface UserImagesRepository extends CrudRepository<UserImages, Long> {
UserImages findById(long id);
}
首先,您必须决定在ORM层(即hibernate)中使用单向关系还是双向关系。它们之间既有优点也有缺点,而且像往常一样,在不同的用法中,选择也不尽相同。据我所知,您希望这里有一个双向的,所以在实体之间提供同步方法(添加和删除)是至关重要的
@JoinColumn
或mappedBy
执行此操作,这两种方法都可以使用Users
实体是持久的,那么当您从userImagesList
中删除一些图像时,它将与数据库同步。当负责从列表中删除该图像的方法完成时(或当您使用entityManager.flush()
),该图像将从数据库中删除,因为CascadeType
。在双向映射中,应该通过同步删除方法来删除首先,您必须决定在ORM层(即hibernate)中使用单向关系还是双向关系。它们之间既有优点也有缺点,而且像往常一样,在不同的用法中,选择也不尽相同。据我所知,您希望这里有一个双向的,所以在实体之间提供同步方法(添加和删除)是至关重要的
@JoinColumn
或mappedBy
执行此操作,这两种方法都可以使用Users
实体是持久的,那么当您从userImagesList
中删除一些图像时,它将与数据库同步。当负责从列表中删除该图像的方法完成时(或当您使用entityManager.flush()
),该图像将从数据库中删除,因为CascadeType
。在双向映射中,应该通过同步删除方法来删除class UserLocation{
long id;
@OneToOne(mappedBy="userlocation")
Users usersObj;
// some other data members
// getters and setters
}
public interface UserImagesRepository extends CrudRepository<UserImages, Long> {
UserImages findById(long id);
}
@Repository
Public class YourServiceClass {
@PersistenceContext
private EntityManager em;
public UserImages getUserImageByUser(Users user) {
return em.createQuery("FROM UserImages WHERE usersObj.id = :userId")
.setParameter("userId", user.getId())
.getSingleResult();
}
}
@Entity
@Table(name = "user")
class Users {
@Id
Long id;
@OneToMany(cascadeType = CascadeType.ALL)
@JoinColumn(name = "user_id") // here Users is the owning side
List<UserImages> userImagesList = new LinkedList<>();
@OneToOne
@JoinColumn(name = "user_id")
UserLocation userLocation;
void addUserImage(UserImage userImage) {
this.userImagesList.add(userImage);
userImage.setUser(this);
}
void removeUserImage(UserImage userImage) {
this.userImagesList.remove(userImage);
userImage.setUser(null);
}
// some other data members
// getters and setters
// hashCode and equals!!!
}
@Entity
@Table(name = "user_image")
class UserImages {
@Id
Long id;
@ManyToOne(mappedBy = "userImagesList")
Users usersObj;
// some other data members
// hashCode and equals!!!
// getters and setters
}