我在java中制作电子邮件客户端。当用户创建带附件(文档)的邮件时,它会将所有关于电子邮件的数据保存在数据库中,但保存在多个表中,如Document_table.title中的附件标题,msgnumber.num中的邮件数,msgnumber.date中的日期,发件人姓名在Official_Person.name和OfficialPerson.secondname中。 我如何检索所有这些数据并显示它(我使用Jtable为此)?我知道如果数据保存在一个表中而不是多个表中,如何获取数据。请帮帮我。
一种格式有许多documnet。
文件:
@Entity
@Table(name="DOCUMENT"
,schema="Default"
)
public class Document implements java.io.Serializable {
@ManyToOne
@JoinColumn(name = "FormatID")
private Format format;
@Id
@Column(name = "DocumentID", unique = true, nullable = false)
private int documentId;
格式:
@Entity
@Table(name="FORMAT"
,schema="Default"
)
public class Format implements java.io.Serializable {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "FormatID")
private Set<Document> documents = new HashSet();
@Id
@Column(name = "FormatID", unique = true, nullable = false)
private int formatId;
format.hbm
<hibernate-mapping>
<class name="entity2.Format" table="FORMAT">
<id name="formatId" type="int">
<column name="FormatID" length="2000000000" />
<generator class="native" />
</id>
<set name="documents" table="DOCUMENT"
inverse="true" lazy="true" fetch="select">
<key>
<column name="FormatID" not-null="true" />
</key>
<one-to-many class="entity2.Document" />
</set>
document.hbm
<hibernate-mapping>
<class name="entity2.Document" table="DOCUMENT">
<id name="documentId" type="int">
<column name="DocumentID" length="2000000000" />
<generator class="native" />
</id>
<many-to-one name="format" class="entity2.Format" fetch="select">
<column name="FormatID" not-null="true" />
</many-to-one>
我想检索格式1的所有文档:
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Format f = (Format) session.get(Format.class, 1);
System.out.println(f.getName());
System.out.println(f.getDocuments());
文件是空的?我哪里错了?
答案 0 :(得分:1)
您只需使用select语句为您要检索的所有值编写查询。 Hibernate将返回一个数组,其中的索引值与select语句的顺序相同。
选择 FROM Person AS P,Address AS A,Order AS O,User AS U. 在哪里P.id = 5 AND A.personId = P.id 和O.personId = P.id 和U.personId = P.id
这将返回一个包含{person,address,List,User}
的数组答案 1 :(得分:1)
Hibernate是一个ORM工具 - “O”代表“对象”。从映射到表和列的电子邮件对象开始。然后使用HQL查询满足特定限制的电子邮件实例。
JTable或网页显示问题与查询对象的方式不同。
答案 2 :(得分:1)
如果您定义类之间的关系,例如:
class Person {
@OneToMany(cascade=CascadeType.ALL,
fetch= FetchType.EAGER)
private Set<Email> emails = new HashSet();
// getters/setters and some other attributes are not shown
当您从数据库中读取对象时,您将获得另一个与其自动关联的对象。
Session s = HibernateUtil.getSessionFactory().openSession();
Person p = (Person) s.get(Person.class, 1);
s.close();
System.out.println(p.getName());
System.out.println(p.getEmails());
以下是双向一对一关系的示例。
class Person {
@OneToOne(cascade=CascadeType.ALL)
private Address address;
class Address {
@OneToOne(mappedBy=”address”)
private Person person