将多个表映射到一个对象时拥有ORM和数据冗余

时间:2012-05-03 23:04:20

标签: database design-patterns orm jdbc

首先,对不起我的英语。

这是我第一次使用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)我可以通过在table message上执行SQL select连接这两个表来将Message映射到对象message.recipient_id = person.id。相应的对象将填充new Message(..., new Person(...))。只要人与信息之间存在“一对多”关系,这当然会给我留下大量重复数据。

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

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

0 个答案:

没有答案