부자류표의 디자인
개발 도구: myeclipse 5.5.1 GA
데이터베이스:mysql-5.0.37
운영 체제: 윈도우즈 xp professional 중국어 버전
단계:
1. mysql5 데이터베이스 테스트db를 구축하고 스크립트 아래에 제시합니다.
2. myeclipse의 데이터베이스 서버를 설정하고 mysql5라는 데이터베이스 링크를 만듭니다.
3、myeclipse의 웹 프로젝트를 제안합니다. 이름은 dx 입니다.d2yzs,hibernate 지원에 가입하고hibernate3을 선택하십시오.1, 최고 3.1까지 지원.
4. myeclipse의 데이터베이스 보기에서 데이터베이스를 연결하고 표를 통해 실체 PO와 프로필을 생성하며 중간에DAO를 생성하지 않습니다.
5. 프로필의 정확성을 검사한 다음에 테스트 클래스에서 테스트를 진행한다.
1. 데이터베이스를 만드는 스크립트:
drop table if exists part;
-- alter table part drop foreign key fk_part;
create table part(
id bigint not null primary key,
name varchar(20),
father_id bigint
);
alter table part add index fk_part (father_id),
add constraint fk_part foreign key (father_id) references part(id);
테이블 관계의 로지컬 다이어그램:
+-----------+
| Part |
+-----------+
| id |<---------|<PK>
| name | |
| father_id |----------|<FK>
+-----------+
특히 주의: 외부 키 제약이 있기 때문에 사무 지원이 필요합니다. 데이터베이스를 설치할 때 mysql 데이터베이스 서버의 파라미터를 설정해야 합니다.데이터베이스의 엔진은 이노DB를 사용해야 하며 자동 제출 모드, 즉 SET AUTOCOMMIT=0을 닫아야 한다.
#[WinMySQLAdmin]
#Server=D:/mysql-5.0.37-win32/bin/mysqld.exe
[mysqld]
# set basedir to your installation path
#basedir=D:/mysql-5.0.37-win32
# set datadir to the location of your data directory
port = 3306
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
datadir=data
default-character-set=gbk
init_connect='SET AUTOCOMMIT=0'
default-table-type=InnoDB
init_connect='set completion_type=1'
[client]
default-character-set=gbk
------------------------------------
2. myeclipse를 통해 실체와 프로필을 생성합니다.
Part.java
---------------------
public class Part implements java.io.Serializable {
// Fields
private Long id;
private String name;
private Part part; // Part
private Set parts = new HashSet(0); // Part
// Constructors
/** default constructor */
public Part() {
}
/** minimal constructor */
public Part(Long id) {
this.id = id;
}
public Part(String name) {
this.name = name;
}
/** full constructor */
public Part(Long id, Part part, String name, Set parts) {
this.id = id;
this.part = part;
this.name = name;
this.parts = parts;
}
// Property accessors
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public Part getPart() {
return this.part;
}
public void setPart(Part part) {
this.part = part;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Set getParts() {
return this.parts;
}
public void setParts(Set parts) {
this.parts = parts;
}
}
Part.hbm.xml
-------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.lavasoft.Part" table="part">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" />
</property>
<many-to-one name="part" class="org.lavasoft.Part" fetch="select">
<column name="father_id" />
</many-to-one>
<set name="parts" cascade="save-update" inverse="true">
<key>
<column name="father_id" />
</key>
<one-to-many class="org.lavasoft.Part" />
</set>
</class>
</hibernate-mapping>
、 :
---------------------
package org.lavasoft;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//if(HibernateSessionFactory.getSession()==null) System.out.println("null");
Part p1=new Part("p1");
Part p11=new Part("p11");
Part p12=new Part("p12");
p1.getParts().add(p11);
p1.getParts().add(p12);
p11.setPart(p1);
p12.setPart(p1);
Session session = HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
try {
session.save(p1);
tx.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
tx.rollback();
}finally{
session.close();
}
}
}
4. 테스트 클래스 Test를 실행하고 콘솔에서 정보를 인쇄합니다.
------------------------------------------
Hibernate: select max(id) from part
Hibernate: insert into part (name, father_id, id) values (?, ?, ?)
Hibernate: insert into part (name, father_id, id) values (?, ?, ?)
Hibernate: insert into part (name, father_id, id) values (?, ?, ?)
:
------------------------------------------
D:mysql-5.0.37-win32bin>mysql -uroot -pleizhimin
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 13
Server version: 5.0.37-community MySQL Community Edition (GPL)
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use testdb;
Database changed
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| card |
| customers |
| orders |
| part |
| person |
| t_user |
| user |
+------------------+
7 rows in set (0.02 sec)
mysql> describe part;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | bigint(20) | NO | PRI | | |
| name | varchar(20) | YES | | NULL | |
| father_id | bigint(20) | YES | MUL | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> select * from part;
+----+------+-----------+
| id | name | father_id |
+----+------+-----------+
| 1 | p1 | NULL |
| 2 | p12 | 1 |
| 3 | p11 | 1 |
+----+------+-----------+
3 rows in set (0.00 sec)
mysql>
테스트 결과 부기관을 보존할 때 부기관 아래의 자기관을 등급별로 보존할 수 있다는 것이 밝혀졌다.
총괄: 이 테이블이 만들어진 후 myeclipse에서 생성된 PO는 아무런 변경도 필요 없고, 생성된 마핑도 카스캐드="save-update"를 추가해야 한다.그리고 테스트 클래스를 직접 써서 테스트를 진행합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간편한 Java 브리지 모드정의: 추상적인 부분과 실현된 부분을 분리하여 그것들이 모두 독립적으로 변화할 수 있도록 한다. 특징: 브리지 모델은 클래스의 최소 디자인 원칙을 바탕으로 봉인, 집합 및 계승 등 행위를 통해 서로 다른 클래스가 서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.