首先,对不起我的英语。
这是我第一次在 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
到对象。相应的对象将填充. 只要人和消息之间存在“一对多”关系,这当然会给我留下大量重复的数据。Message
message.recipient_id = person.id
new Message(..., new Person(...))
2)我可以从 中选择所有内容table person
,填充对象new Person(...)
并将它们存储在其中Map<Integer, Person>
(映射键将保存 id)。然后从其中选择所有内容table message
并通过查找匹配手动“加入”这两个Person
。这将给我留下一个Person
由多个Message
's 引用的实例,但我担心在这种情况下将数据保存在数据库中的全部意义都丢失了。
ORM 系统如何处理这个问题?在那种情况下我该怎么办?