有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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类的类,它有RoomDAORoomTipologyDAO作为字段?能用吗

对于我的情况,你认为什么是最好的架构选择


共 (0) 个答案