Da ich mit der Lückenzeit schreibe, würde ich es begrüßen, wenn Sie auf Teile mit geringer Genauigkeit hinweisen könnten. Schließen Sie zunächst diejenigen aus, die EOL sind. Wir werden kostenpflichtige Funktionen in Betracht ziehen, diese jedoch aufgrund des Taschenproblems nicht verwenden. Die verwendete Datenbank ist aus einem dummen Grund wie "Nun, vielleicht kann Postgre verwendet werden, auch wenn es nicht angegeben ist" auf Postgre festgelegt.
ORM | Transaction | Data Model | DSL |
---|---|---|---|
○ | ○ | ※ | ○ |
○: Korrespondenz ×: Nicht unterstützt *: Es gibt eine Funktion zum Erstellen verwandter Tabellen, wenn eine Viele-zu-Viele-Beziehung besteht.
Main.java
//Das erste Tutorial, das JPQL empfiehlt ... und es ist nicht typsicher ...
session.createQuery("from Employee").list().stream().forEach(o -> {
Employee e = (Employee)o;
Main.sysout(e);
});
//CriteriaBuilder ist in Ordnung, aber es ist ein Tutorial ...
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> query = builder.createQuery(Employee.class);
Root<Employee> root = query.from(Employee.class);
session.createQuery(query.select(root).select(root)).getResultList().stream().forEach(Main::sysout);
//Ein Tutorial, das JPQL auch von EntityManager empfiehlt ……
em.createQuery("from Employee", Employee.class).getResultList().stream().forEach(Main::sysout);
//Nachdem Criteria Builder gut ist, ist es ein Tutorial ...
CriteriaBuilder builder2 = em.getCriteriaBuilder();
CriteriaQuery<Employee> query2 = builder2.createQuery(Employee.class);
Root<Employee> root2 = query2.from(Employee.class);
em.createQuery(query2.select(root2).select(root2)).getResultList().stream().forEach(Main::sysout);
Main#sysout(Employee).java
public static void sysout(Employee e) {
System.out.format("%1s: %2s, %3s, %4s\n", e.id, e.first_name, e.middle_name, e.last_name);
}
Main.java
//Sitzungsversion zu verwenden
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> query = builder.createQuery(Employee.class);
Root<Employee> root = query.from(Employee.class);
session.createQuery(query.select(root).select(root).where(builder.equal(root.get(Employee_.id), 1L)))
.getResultList()
.stream()
.forEach(Main::sysout);
//Version zur Verwendung von EntityManager
CriteriaBuilder builder2 = em.getCriteriaBuilder();
CriteriaQuery<Employee> query2 = builder2.createQuery(Employee.class);
Root<Employee> root2 = query2.from(Employee.class);
em.createQuery(query2.select(root2).select(root2).where(builder2.equal(root2.get(Employee_.id), 1L)))
.getResultList()
.stream()
.forEach(Main::sysout);
Main.java
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> query = builder.createQuery(Employee.class);
Root<Employee> root = query.from(Employee.class);
session.createQuery(query.select(root).select(root).where(builder.equal(root.get(Employee_.id), 1L)))
.getResultList()
.stream()
.peek(Main::sysout)
.map(e -> e.posts)
.flatMap(ps -> ps.stream())
.forEach(Main::sysout);
CriteriaBuilder builder2 = em.getCriteriaBuilder();
CriteriaQuery<Employee> query2 = builder2.createQuery(Employee.class);
Root<Employee> root2 = query2.from(Employee.class);
em.createQuery(query2.select(root2).select(root2).where(builder2.equal(root2.get(Employee_.id), 0L)))
.getResultList()
.stream()
.peek(Main::sysout)
.map(e -> e.posts)
.flatMap(ps -> ps.stream())
.forEach(Main::sysout);
Main#sysout(Post).java
public static void sysout(Post p) {
System.out.format("\t%1s: %2s, %3s\n", p.id, p.employee_id, p.name);
}
Employee.java
@Entity
@Table(name="employee")
public class Employee {
@Id
public long id;
public String first_name;
public String middle_name;
public String last_name;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "id", referencedColumnName = "employee_id", table = "post")
public List<Post> posts = new ArrayList<>();
public long getId() {return this.id;}
public void setId(long id) {this.id = id;}
public String getFirst_name() {return this.first_name;}
public void setFirst_name(String first_name) {this.first_name = first_name;}
public String getMiddle_name() {return this.middle_name;}
public void setMiddle_name(String middle_name) {this.middle_name = middle_name;}
public String getLast_name() {return this.last_name;}
public void setLast_name(String last_name) {this.last_name = last_name;}
public List<Post> getPosts() {return this.posts;}
public void setPosts(List<Post> posts) {this.posts = posts;}
}
Post.java
@Entity
@Table(name = "post")
public class Post {
@Id
public long id;
public long employee_id;
public String name;
public long getId() {return this.id;}
public void setId(long id) {this.id = id;}
public long getEmployee_id() {return this.employee_id;}
public void setEmployee_id(long employee_id) {this.employee_id = employee_id;}
public String getName() {return this.name;}
public void setName(String name) {this.name = name;}
}
Employee.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hibernate.models">
<class name="Employee" table="employee">
<id name="id" column="id"/>
<property name="first_name" column="first_name"/>
<property name="middle_name" column="middle_name"/>
<property name="last_name" column="last_name"/>
<bag name="posts" table="post">
<key column="employee_id"/>
<one-to-many class="Post"/>
</bag>
</class>
</hibernate-mapping>
Post.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hibernate.models">
<class name="Post" table="post">
<id name="id" column="id"/>
<property name="employee_id" column="employee_id"/>
<property name="name" column="name"/>
</class>
</hibernate-mapping>
Ist noch nicht.
Recommended Posts