2

首先,对不起我的英语。

这是我第一次在 Java 中使用数据库,我想用纯 JDBC 和 SQL 编写一个简单的中间层(数据库和应用程序之间),它将我的表映射到对象(反之亦然)。我已经阅读了一些关于 DAO、ORM 和 Active Record 模式的内容,但有一件事让我很困扰:当填充由多个表组成的对象时,这个系统如何处理数据冗余?

例如:

我有两张桌子

TABLE message (id, content, recipient_id)
TABLE person (id, name, address)

我想映射到

/* depends on message and person tables */
class Message
{
    public Message(int id, String content, Person recipient) {...}
    // setters, getters ommited.
    private int id;
    private String content;
    private Person recipient;
}

/* depends on person table */
class Person
{
    public Person(int id, String name, String address) {...}
    // setters, getters ommited.
    private int id;
    private String name;
    private String address;
}

我看到两个解决方案:

1)我可以通过执行 SQL 选择连接这两个表来映射table message到对象。相应的对象将填充. 只要人和消息之间存在“一对多”关系,这当然会给我留下大量重复的数据。Messagemessage.recipient_id = person.idnew Message(..., new Person(...))

2)我可以从 中选择所有内容table person,填充对象new Person(...)并将它们存储在其中Map<Integer, Person>(映射键将保存 id)。然后从其中选择所有内容table message并通过查找匹配手动“加入”这两个Person。这将给我留下一个Person由多个Message's 引用的实例,但我担心在这种情况下将数据保存在数据库中的全部意义都丢失了。

ORM 系统如何处理这个问题?在那种情况下我该怎么办?

4

0 回答 0