java是合并2个Spring数据JPA存储库类的最佳架构选择
我对Spring Data JPA非常陌生,我对实现以下情况的最佳方法有以下疑问:
所以基本上我有以下两个模型类:
房间(代表住宿房间):
@Entity
@Table(name = "room")
public class Room implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@ManyToOne
@JoinColumn(name = "id_accomodation_fk", nullable = false)
private Accomodation accomodation;
@ManyToOne
@JoinColumn(name = "id_room_tipology_fk", nullable = false)
private RoomTipology roomTipology;
@Column(name = "room_number")
private String number;
@Column(name = "room_name")
private String name;
@Column(name = "room_description")
@Type(type="text")
private String description;
@Column(name = "max_people")
private Integer maxPeople;
@Column(name = "is_enabled")
private Boolean isEnabled;
public Room() {
}
// GETTER AND SETTER METHODS
}
以及代表房间风格的房间风格(比如:单人房、双人房等):
@Entity
@Table(name = "room_tipology")
public class RoomTipology implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "tipology_name")
private String name;
@Column(name = "tipology_description")
private String description;
@Column(name = "time_stamp")
private Date timeStamp;
@OneToMany(mappedBy = "roomTipology")
private List<Room> rooms;
@OneToOne(mappedBy = "roomTipology")
private RoomRate roomRate;
// GETTER AND SETTER METHODS
}
好的,使用Spring Data JPA,我将有两个不同的存储库类(一个用于Room实体类,另一个用于RoomTipology实体类,如下所示:
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomDAO extends JpaRepository<Room, Long> {
//@Query("FROM Room WHERE accomodation = :id")
List<Room> findByAccomodation(Accomodation accomodation);
}
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomTipologyDAO extends JpaRepository<RoomTipologyDAO , Long> {
// METHOD RELATED TO THE ACCESS TO ROOM TIPOLOGY ENTITIES
}
好吧,我有以下建筑方面的疑问:
我有两个小的repositories类,可以访问语义相似的东西(room概念和room tipology概念都与room相关)
此外,正如您在RoomTipology实体类的代码中所看到的,有以下字段:
@OneToMany(mappedBy = "roomTipology")
private List<Room> rooms;
这是由@OneToMany注释映射的(因为从一个特定的房间主题开始,我想进入这个主题的所有房间:所有单人房或所有双人房等等……)
因此,遵循这种架构风格,我将使用一种方法,将与room tipology关联的列表返回到RoomTipologyDAO存储库类,而不是返回到RoomTipology存储库类。。它工作正常,但语义不好,因为我将有一个RoomTipologyDAO方法,它不返回与RoomTipology实例相关的内容,而是返回一个Room对象的列表
这不恶心吗
那么,在这种情况下,创建使用Spring数据JPA的架构的最佳方法是什么呢
我不能这样做:
public interface RoomDAO extends JpaRepository<Room, Long> extends JpaRepository<RoomTipology, Long> {
........................................................
........................................................
........................................................
}
因为Java不支持多重遗传,但我认为最好的选择应该是这样的
也许我可以创建一个类似于RoomMetaDAO类的类,它有RoomDAO和RoomTipologyDAO作为字段?能用吗
对于我的情况,你认为什么是最好的架构选择
共 (0) 个答案