⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quickstart.po

📁 hibernate-distribution-3.3.1.GA-dist.zip源码
💻 PO
📖 第 1 页 / 共 3 页
字号:
      "--------+-----------------------+-----------\n"      " cat_id | character(32)         | not null\n"      " name   | character varying(16) | not null\n"      " sex    | character(1)          |\n"      " weight | real                  |\n"      "Indexes: cat_pkey primary key btree (cat_id)]]>"#: index.docbook:270msgid "appended paragraph 46"msgstr "당신은 이제 수작업으로 당신의 데이터베이스 내에 이 테이블을 생성시킬 것이고, 만일 당신이 <literal>hbm2ddl</literal> 도구로 이 단계를 자동화 시키고자 원할 경우 <xref linkend=\"toolsetguide\"/>를 읽어라. 이 도구는 테이블 정의, 맞춤형 컬럼 타입 컨스트레인트들, 유일 컨스트레인트들과 인덱스들을 포함하는, 전체 SQL DDL을 생성시킬 수 있다."#: index.docbook:279msgid "appended paragraph 47"msgstr "cat들에 작업하기"#: index.docbook:281msgid "appended paragraph 48"msgstr "우리는 이제 Hibernate의 <literal>Session</literal>을 시작할 준비가 되어 있다. 그것은 <emphasis>persistence manager</emphasis> (영속 관리자)이고, 우리는 데이터베이스로 <literal>Cat</literal>들을 저장하고 데이터베이스로부터 <literal>Cat</literal>들을 검색하는데 그것을 사용한다. 그러나 먼저 우리는 <literal>SessionFactory</literal>로부터 <literal>Session</literal>(Hibernate의 작업 단위)를 얻어야 한다:"#: index.docbook:288msgid "appended paragraph 49"msgstr ""      "<![CDATA[SessionFactory sessionFactory =\n"      "            new Configuration().configure().buildSessionFactory();]]>"#: index.docbook:290msgid "appended paragraph 50"msgstr "<literal>configure()</literal> 호출은 <literal>hibernate.cfg.xml</literal> 구성 파일을 로드시키고 <literal>Configuration</literal> 인스턴스를 초기화 시킨다. 당신이 SessionFactory(불변적임)를 빌드하기 <emphasis>이전에</emphasis> 당신은 <literal>Configuration</literal>에 접근함으로써 다른 프로퍼티들을 설정할 수 있다(그리고 심지어 매핑 메타데이터를 변경시킬 수 있다). 우리는 어디서 <literal>SessionFactory</literal>를 생성시키고 우리의 어플리케이션 속에서 어떻게 그것에 접근할 수 있나?"#: index.docbook:298msgid "appended paragraph 51"msgstr "<literal>SessionFactory</literal>는 대개 오직 한번만, 예를 들어 대개 <emphasis>load-on-startup</emphasis> 서블릿으로 시작 시에 빌드된다. 이것은 또한 당신이 당신의 서블릿들 내에 있는 인스턴스 변수 속에 그것을 유지하지 않을 것이지만 어떤 다른 위치에 유지시킬 것임을 의미한다. 더구나 우리는 어떤 종류의 <emphasis>Singleton</emphasis>을 필요로 하며, 따라서 우리는 어플리케이션 코드로 쉽게 <literal>SessionFactory</literal>에 액세스 할 수 있다. 다음에 보여진 접근법은 두 문제 모두를 해결한다: 시작 구성과 <literal>SessionFactory</literal>에 대한 쉬운 접근."#: index.docbook:306msgid "appended paragraph 52"msgstr "우리는 <literal>HibernateUtil</literal> helper 클래스를 구현한다:"#: index.docbook:310msgid "appended paragraph 53"msgstr ""      "<![CDATA[import org.hibernate.*;\n"      "import org.hibernate.cfg.*;\n"      "\n"      "public class HibernateUtil {\n"      "\n"      "    private static Logger log = LoggerFactory.getLogger(HibernateUtil.class);\n"      "\n"      "    private static final SessionFactory sessionFactory;\n"      "\n"      "    static {\n"      "        try {\n"      "            // Create the SessionFactory\n"      "            sessionFactory = new Configuration().configure().buildSessionFactory();\n"      "        } catch (Throwable ex) {\n"      "            // Make sure you log the exception, as it might be swallowed\n"      "            log.error(\"Initial SessionFactory creation failed.\", ex);\n"      "            throw new ExceptionInInitializerError(ex);\n"      "        }\n"      "    }\n"      "\n"      "    public static final ThreadLocal session = new ThreadLocal();\n"      "\n"      "    public static Session getCurrentSession() {\n"      "        Session s = (Session) session.get();\n"      "        // Open a new Session, if this Thread has none yet\n"      "        if (s == null) {\n"      "            s = sessionFactory.openSession();\n"      "            session.set(s);\n"      "        }\n"      "        return s;\n"      "    }\n"      "\n"      "    public static void closeSession() {\n"      "        Session s = (Session) session.get();\n"      "        if (s != null)\n"      "            s.close();\n"      "        session.set(null);\n"      "    }\n"      "}]]>"#: index.docbook:312msgid "appended paragraph 54"msgstr "이 클래스는 static 초기자를 가진 <literal>SessionFactory</literal>를 처리할 뿐만 아니라 또한 현재의 쓰레드를 위한 <literal>Session</literal>을 소유하는 <literal>ThreadLocal</literal> 변수를 갖는다. 이 helper를 사용하려고 시도하기 전에 thread-local 변수에 대한 자바 개념을 이해해야 한다. 보다 복잡하고 강력한 <literal>HibernateUtil</literal> 클래스는 http://caveatemptor.hibernate.org/의 <literal>CaveatEmptor</literal>에서 찾을 수 있다."#: index.docbook:319msgid "appended paragraph 55"msgstr "<literal>SessionFactory</literal>는 threadsafe이고, 많은 쓰레드들이 동시에 그것에 접근할 수 있고 <literal>Session</literal>들을 요청할 수 있다. 하나의 <literal>Session</literal>은 데이터베이스에 대해 한 개의 단위 작업을 나타내는 non-threadsafe 객체이다. <literal>Session</literal>들은 <literal>SessionFactory</literal> 로부터 열려지고 모든 작업이 완료될 때 닫혀진다. 당신의 서블릿의 <literal>process()</literal> 메소드 내에 있는 예제는 다음과 같을 수 있다(예외상황 처리 없이):"#: index.docbook:327msgid "appended paragraph 56"msgstr ""      "<![CDATA[Session session = HibernateUtil.getCurrentSession();\n"      "Transaction tx = session.beginTransaction();\n"      "\n"      "Cat princess = new Cat();\n"      "princess.setName(\"Princess\");\n"      "princess.setSex('F');\n"      "princess.setWeight(7.4f);\n"      "\n"      "session.save(princess);\n"      "\n"      "tx.commit();\n"      "HibernateUtil.closeSession();]]>"#: index.docbook:329msgid "appended paragraph 57"msgstr "하나의 <literal>Session</literal> 내에서 모든 데이터베이스 오퍼레이션은 데이터베이스 오퍼레이션들(심지어 읽기 전용 오퍼레이션들 조차도)을 격리시키는 하나의 트랜잭션 내부에서 발생한다. 우리는 기본 트랜잭션 방도(우리의 경우, JDBC 트랜잭션들)로부터 추상화시키는데 Hibernates <literal>Transaction</literal> API 를 사용한다. 이것은 우리의 코드가 임의의 변경들 없이도 (JTA를 사용하는) 컨테이너-관리되는 트랜잭션들에 배치되는 것을 허용해준다."#: index.docbook:336msgid "appended paragraph 58"msgstr "당신이 원하는 만큼 당신이 <literal>HibernateUtil.getCurrentSession();</literal>을 호출할 수 있고, 당신은 이 쓰레드의 현재 <literal>Session</literal>을 항상 얻을 것임을 노트하라. 당신은 서블릿 코드 내에서든 또는 서블릿 필터 내에서든 HTTP response가 전송되기 전에, 당신의 단위 작업이 완료된 후에 <literal>Session</literal>이 확실히 닫혀지도록 해야 한다. 두 번째 옵션의 좋은 측면은 쉬운 lazy 초기화이다: 뷰가 렌더링 될 때 <literal>Session</literal>이 여전히 열려져 있어서, Hibernate는 당신이 현재 객체 그래프를 네비게이트 하는 동안 초기화 되지 않은 객체들을 로드시킬 수 있다."#: index.docbook:344msgid "appended paragraph 59"msgstr "Hibernate는 데이터베이스로부터 객체들을 검색하는데 사용될 수 있는 다양한 메소드들을 갖고 있다. 가장 유연한 방법은 Hibernate Query Language (HQL)을 사용하는 것이다. Hibernate Query Language (HQL)은 배우기가 쉽고 SQL에 대한 강력한 객체 지향 확장이다:"#: index.docbook:350msgid "appended paragraph 60"msgstr ""      "<![CDATA[Transaction tx = session.beginTransaction();\n"      "\n"      "Query query = session.createQuery(\"select c from Cat as c where c.sex = :sex\");\n"      "query.setCharacter(\"sex\", 'F');\n"      "for (Iterator it = query.iterate(); it.hasNext();) {\n"      "    Cat cat = (Cat) it.next();\n"      "    out.println(\"Female Cat: \" + cat.getName() );\n"      "}\n"      "\n"      "tx.commit();]]>"#: index.docbook:352msgid "appended paragraph 61"msgstr "Hibernate는 또한 type-safe 질의들을 공식화 시키는데 사용될 수 있는 객체-지향 <emphasis>query by criteria</emphasis> API을 제공한다. 물론 Hibernate는 데이터베이스와의 모든 SQL 통신을 위해 <literal>PreparedStatement</literal>들과 파라미터 바인딩을 사용한다. 당신은 또한 Hibernate 직접적인 SQL 질의 특징을 사용할 수도 있거나 드문 경우에 <literal>Session</literal>으로부터 plain JDBC 커넥션을 얻을 수도 있다."#: index.docbook:362msgid "appended paragraph 62"msgstr "마지막으로"#: index.docbook:364msgid "appended paragraph 63"msgstr "우리는 이 작은 튜토리얼 내에서 단지 Hibernate의 표면을 훑기만 했다. 우리는 우리의 예제들 속에 어떤 서블릿 지정적 코드를 포함하지 않음을 노트하라. 당신이 적합한지를 알려고 할 때 당신은 당신 자신의 서블릿을 생성시켜야 하고 Hibernate 코드를 삽입해야 한다."#: index.docbook:370msgid "appended paragraph 64"msgstr "데이터 접근 계층으로서 Hibernate는 당신의 어플리케이션에 강하게 통합됨을 염두에 두라. 대개 모든 다른 레이어들은 영속 메커니즘에 의존했다. 당신은 이 설계의 함축을 확실히 이해하도록 하라."#: index.docbook:375msgid "appended paragraph 65"msgstr "보다 복잡한 어플리케이션 예제는 http://caveatemptor.hibernate.org/ 를 보고 http://caveatemptor.hibernate.org/에 있는 다른 튜토리얼들을 살펴보라."msgid "ROLES_OF_TRANSLATORS"msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"msgid "CREDIT_FOR_TRANSLATORS"msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -