技术开发 频道

用Java+Flex编写一个简单而强大的RIA

  类很简单,但对于注释则有很多内容需要解释:

  @Column:将属性标记为数据库内的一个列,可含有列名,不管它是否唯一且是否可为空

  @Entity:将类作为一个实体 bean 声明,表明它是一个要留存的 POJO

  @GeneratedValue:指定生成主键的策略;包括 AUTO、IDENTITY、SEQUENCE 和 TABLE

  @Id:指明属性为每个 Java 对象的唯一标识符(即主键)

  @NamedQueries:列出一组命名查询

  @NamedQuery:将预定义查询声明为一个字符串常量,以供执行时引用。

  @Table:将 Java 类指定为数据库内的一个表

  每次需要留存一个内存中的 Java 对象时,Hibernate 将任何 Java 对象的状态信息转换为一个 SQL 更新。同样地,带结果集的 SQL 语句用于填充 Java 对象。因此,可将所有对象保存为数据库内的记录,且可检索所有记录并将其转换回 Java 对象。

  注释告知 Hibernate 一个类中的哪些内容可以考虑留存。但它们只是类的一部分。

  业务服务:数据库连接

  执行 ORM 时需要有一个服务类来执行对 Hibernate 的调用。清单 2 显示了 ContactsService 类,它充当应用程序服务。

  清单 2. ContactsService 类

public class ContactsService {

    
private static Logger logger = Logger.getLogger(ContactsService.class);

    
private static final String PERSISTENCE_UNIT = "contacts";

    
private static EntityManagerFactory emf = null;

    static {
        logger.info(
"LOADING CONTACTSSERVICE CLASS.");
        emf
= Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
    }

    
public ContactsService() {
        super();
    }

    
public void addContact(Contact c) {
        
if(c == null) {
            return;
        }

        EntityManager em
= emf.createEntityManager();
        logger.info(
"PERSISTENCE ENTITYMANAGER ACQUIRED.");

        logger.info(
"ABOUT TO ADD CONTACT: fName: " + c.getFirstName()
            
+ ", lName: " + c.getLastName() + ", email:" + c.getEmailAddress()
            
+ ", phone: " + c.getPhoneNumber());
        EntityTransaction tx
= em.getTransaction();
        try {
            tx.begin();
            em.merge(c);
            tx.commit();
        } catch (Exception e) {
            logger.error(
"CONTACT APP PERSISTING ERROR: " + e.getMessage());
            tx.rollback();
        } finally {
            logger.info(
"CONTACT APP CLOSING ENTITY MANAGER.");
            em.close();
        }
    }

    
public void editContact(Contact c) {
        logger.info(
"CONTACT TO UPDATE: " + c);
        addContact(c);
    }

    
public void deleteContact(Long id) {
        logger.info(
"ABOUT TO DELETE CONTACT");

        EntityManager em
= emf.createEntityManager();
        logger.info(
"PERSISTENCE ENTITYMANAGER ACQUIRED.");

        Query contactByIdQuery
= em.createNamedQuery("contact.getById");
        contactByIdQuery.setParameter(
"id", id);
        Contact c
= (Contact) contactByIdQuery.getSingleResult();
        EntityTransaction tx
= em.getTransaction();
        try {
            tx.begin();
            em.remove(c);
            tx.commit();

        } catch (Exception e) {
            logger.error(
"CONTACT APP PERSISTING ERROR: " + e.getMessage());
            tx.rollback();
        } finally {
            logger.info(
"CONTACT APP CLOSING ENTITY MANAGER.");
            em.close();
        }
    }

    
public List<Contact> getContacts() {
        logger.info(
"ABOUT TO RETRIEVE CONTACTS");

        EntityManager em
= emf.createEntityManager();
        logger.info(
"PERSISTENCE ENTITYMANAGER ACQUIRED.");

        Query findAllContactsQuery
=
            em.createNamedQuery(
"contact.findAll");
        List
<Contact> contacts = findAllContactsQuery.getResultList();

        
if (contacts != null) {
            logger.debug(
"CONTACT APP RETRIEVED: " + contacts.size()
                
+ " CONTACT(S)");
        }
        return contacts;
    }
}


0
相关文章