如果您要将数据映射到数据库,那么您可能需要研究Java持久性体系结构(JPA)标准。类使用定义表字段,关系等的标签进行注释,而不会实质性地影响对那些东西不感兴趣的代码如何与类进行交互。换句话说,这是一个POJO。
JPA的实现,如Hibernate & OpenJPA使用注释从数据源加载/存储实体,该数据源通常是SQL数据库,但严格来说不一定非要。
存储在数据库中的类将被注释为@Entity
,并且包含可能是持久性或瞬态的字段。您还可以指定@Column字段映射到数据库中,并使用@OneToOne
,@ManyToOne
和@OneToMany
注释与@JoinTable
,@JoinColumn
来定义权利之间的关系。
实体通过EntityManager
和查询语言进行存储/检索。
例如
@Entity
@Table(name = "BOOKS")
class Book {
@Id
@Column(name = "BOOK_ID")
int bookId;
@ManyToOne
@JoinColumn(name = "AUTHOR_ID", insertable = false, updatable = false)
Author author;
@Column(name = "TITLE")
String title;
@Transient
double relevanceScore;
}
@Entity
@Table(name = "AUTHORS")
class Author {
@Id
@Column(name = "AUTHOR_ID")
int id;
@Column(name = "NAME")
String name;
@OneToMany(mappedBy = "AUTHORS")
@JoinColumn(name = "AUTHOR_ID")
Set<Book> books;
}
,并利用它:
Query q = getEntityManager.createQuery("SELECT b FROM Book b WHERE b.title = :title");
q.setParameter("title", title);
return q.getResultList();
在Hibernate中的情况下,你可以选择是否使用JPA风格批注或外部XML映射文件。在大多数情况下,注释可能更易于维护,但如果您想在运行时使用映射而不重建源代码,则XML可能会很有用。如果您拥有单个实体并根据其部署针对不同数据源存储,则后者可能会很有用。
请不要提问像这个社区维基。 – 2010-10-13 08:11:10
@seanizer:社区wiki有没有问题?这个问题似乎接近分界线。 – Douglas 2010-10-13 08:14:16
由于这只是一个问题,想知道如何实现这些东西(所以我知道如何在我自己的应用程序中“合理地”执行某些操作),而不是明确的问题和明确的答案,因此我将此作为一个社区Wiki问题。如果对这个问题的提出存在疑问,那么一般规则是什么? – Patrick 2010-10-13 08:32:05