Java和MySQL - 如何在涉及foriegn密钥时设计类

时间:2017-06-02 16:00:00

标签: java mysql hibernate pojo

MySQL Schema

建筑

id(PK),地址

id(PK),buildingid(FK引用建筑表)

传感器

id(PK),roomid(FK引用房间表),已激活

Java类

public class Building {
    private int id;
    private String address;
    private List<Room> rooms;
}

public class Room {
    private int id;
    private List<Sensor> sensors;
}

public class Sensor {
    private int id;
    private boolean activated;
}

我有一个带有以下签名的方法

public Building getBuilding(int id) {
    // get address from building table
    // get rooms from room table
    // for each room
        // get sensors from sensor table
    // return building object
}

我不确定每次读取整个数据是个好主意。这里有固有的设计问题吗?任何指向设计模式或最佳实践的指针都会很有用。

P.S。我还没有使用像Hibernate之前的任何框架

1 个答案:

答案 0 :(得分:1)

这个问题有点宽泛,但我会尝试一下

  

我不确定每次阅读整个数据是否是个好主意

理想情况下,您应该加载所需的确切数据量。如果你需要一切,那就没有了。

如果您有多个用例,您需要有关构建的特定数据(或其他任何内容),您可以创建多个类来表示它们并使用不同的查询加载它们,例如:

class BuildingWithAddress {
  int id
  String address;
}

class BuildingWithSensors {
  int id
  List<Sensor> sensors;
}

// etc.
  

这里有固有的设计问题吗?

没有。您设计的课程看起来很好,根据您的使用情况,可能就足够了。

  

这里有任何关于设计模式或最佳实践的指针都很有用。

  • 不要过分思考并从一个简单的解决方案开始
  • 只需通过多个班级或lazy loading
  • 加载您需要的数据
  • 避免执行多个查询以检索单个逻辑实体
  • 如有必要,denormalize your database