Merge branch 'master' into master
This commit is contained in:
@@ -60,6 +60,7 @@
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<h2.version>1.4.200</h2.version>
|
||||
<postgresql.version>42.2.5.jre7</postgresql.version>
|
||||
<assertj-core.version>3.10.0</assertj-core.version>
|
||||
<commons-dbcp2.version>2.4.0</commons-dbcp2.version>
|
||||
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
package com.baeldung.genkeys;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class JdbcInsertIdIntegrationTest {
|
||||
|
||||
private static final String QUERY = "insert into persons (name) values (?)";
|
||||
|
||||
private static Connection connection;
|
||||
|
||||
@BeforeClass
|
||||
public static void setUp() throws Exception {
|
||||
connection = DriverManager.getConnection("jdbc:h2:mem:generated-keys", "sa", "");
|
||||
connection
|
||||
.createStatement()
|
||||
.execute("create table persons(id bigint auto_increment, name varchar(255))");
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDown() throws SQLException {
|
||||
connection
|
||||
.createStatement()
|
||||
.execute("drop table persons");
|
||||
connection.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenInsert_whenUsingAutoGenFlag_thenBeAbleToFetchTheIdAfterward() throws SQLException {
|
||||
try (PreparedStatement statement = connection.prepareStatement(QUERY, Statement.RETURN_GENERATED_KEYS)) {
|
||||
statement.setString(1, "Foo");
|
||||
int affectedRows = statement.executeUpdate();
|
||||
assertThat(affectedRows).isPositive();
|
||||
|
||||
try (ResultSet keys = statement.getGeneratedKeys()) {
|
||||
assertThat(keys.next()).isTrue();
|
||||
assertThat(keys.getLong(1)).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenInsert_whenUsingAutoGenFlagViaExecute_thenBeAbleToFetchTheIdAfterward() throws SQLException {
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
String query = "insert into persons (name) values ('Foo')";
|
||||
int affectedRows = statement.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
|
||||
assertThat(affectedRows).isPositive();
|
||||
|
||||
try (ResultSet keys = statement.getGeneratedKeys()) {
|
||||
assertThat(keys.next()).isTrue();
|
||||
assertThat(keys.getLong(1)).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenInsert_whenUsingReturningCols_thenBeAbleToFetchTheIdAfterward() throws SQLException {
|
||||
try (PreparedStatement statement = connection.prepareStatement(QUERY, new String[] { "id" })) {
|
||||
statement.setString(1, "Foo");
|
||||
int affectedRows = statement.executeUpdate();
|
||||
assertThat(affectedRows).isPositive();
|
||||
|
||||
try (ResultSet keys = statement.getGeneratedKeys()) {
|
||||
assertThat(keys.next()).isTrue();
|
||||
assertThat(keys.getLong(1)).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenInsert_whenUsingReturningColsViaExecute_thenBeAbleToFetchTheIdAfterward() throws SQLException {
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
String query = "insert into persons (name) values ('Foo')";
|
||||
int affectedRows = statement.executeUpdate(query, new String[] { "id" });
|
||||
assertThat(affectedRows).isPositive();
|
||||
|
||||
try (ResultSet keys = statement.getGeneratedKeys()) {
|
||||
assertThat(keys.next()).isTrue();
|
||||
assertThat(keys.getLong(1)).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,6 +55,12 @@
|
||||
<artifactId>hibernate-testing</artifactId>
|
||||
<version>${hibernate.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.bytebuddy</groupId>
|
||||
<artifactId>byte-buddy</artifactId>
|
||||
<version>${byte-buddy.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<repositories>
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>hibernate-exceptions</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>hibernate-exceptions</name>
|
||||
|
||||
<parent>
|
||||
<groupId>com.baeldung</groupId>
|
||||
<artifactId>persistence-modules</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.hsqldb</groupId>
|
||||
<artifactId>hsqldb</artifactId>
|
||||
<version>${hsqldb.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-core</artifactId>
|
||||
<version>${hibernate.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.xml.bind</groupId>
|
||||
<artifactId>jaxb-api</artifactId>
|
||||
<version>${jaxb.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<hsqldb.version>2.4.0</hsqldb.version>
|
||||
<jaxb.version>2.3.0</jaxb.version>
|
||||
<hibernate.version>5.3.7.Final</hibernate.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package com.baeldung.hibernate.exception.lazyinitialization;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||
import org.hibernate.cfg.Configuration;
|
||||
import org.hibernate.cfg.Environment;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
|
||||
import com.baeldung.hibernate.exception.lazyinitialization.entity.Role;
|
||||
import com.baeldung.hibernate.exception.lazyinitialization.entity.User;
|
||||
|
||||
public class HibernateUtil {
|
||||
private static SessionFactory sessionFactory;
|
||||
|
||||
public static SessionFactory getSessionFactory() {
|
||||
if (sessionFactory == null) {
|
||||
try {
|
||||
Configuration configuration = new Configuration();
|
||||
Properties settings = new Properties();
|
||||
settings.put(Environment.DRIVER, "org.hsqldb.jdbcDriver");
|
||||
settings.put(Environment.URL, "jdbc:hsqldb:mem:userrole");
|
||||
settings.put(Environment.USER, "sa");
|
||||
settings.put(Environment.PASS, "");
|
||||
settings.put(Environment.DIALECT, "org.hibernate.dialect.HSQLDialect");
|
||||
settings.put(Environment.SHOW_SQL, "true");
|
||||
settings.put(Environment.HBM2DDL_AUTO, "update");
|
||||
configuration.setProperties(settings);
|
||||
configuration.addAnnotatedClass(User.class);
|
||||
configuration.addAnnotatedClass(Role.class);
|
||||
|
||||
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
|
||||
.applySettings(configuration.getProperties()).build();
|
||||
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return sessionFactory;
|
||||
}
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
package com.baeldung.hibernate.exception.lazyinitialization.entity;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "role")
|
||||
public class Role {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id")
|
||||
private int id;
|
||||
|
||||
@Column(name = "role_name")
|
||||
private String roleName;
|
||||
|
||||
public Role() {
|
||||
|
||||
}
|
||||
|
||||
public Role(String roleName) {
|
||||
this.roleName = roleName;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getRoleName() {
|
||||
return roleName;
|
||||
}
|
||||
|
||||
public void setRoleName(String roleName) {
|
||||
this.roleName = roleName;
|
||||
}
|
||||
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
package com.baeldung.hibernate.exception.lazyinitialization.entity;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "user")
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id")
|
||||
private int id;
|
||||
|
||||
@Column(name = "first_name")
|
||||
private String firstName;
|
||||
|
||||
@Column(name = "last_name")
|
||||
private String lastName;
|
||||
|
||||
@OneToMany
|
||||
@JoinColumn(name = "user_id")
|
||||
private Set<Role> roles = new HashSet<>();
|
||||
|
||||
public User() {
|
||||
|
||||
}
|
||||
|
||||
public User(String firstName, String lastName) {
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Set<Role> getRoles() {
|
||||
return roles;
|
||||
}
|
||||
|
||||
public void addRole(Role role) {
|
||||
roles.add(role);
|
||||
}
|
||||
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
package com.baeldung.hibernate.exception.lazyinitialization;
|
||||
|
||||
import org.hibernate.LazyInitializationException;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
|
||||
import com.baeldung.hibernate.exception.lazyinitialization.entity.Role;
|
||||
import com.baeldung.hibernate.exception.lazyinitialization.entity.User;
|
||||
|
||||
public class HibernateNoSessionUnitTest {
|
||||
|
||||
private static SessionFactory sessionFactory;
|
||||
|
||||
@Rule
|
||||
public ExpectedException thrown = ExpectedException.none();
|
||||
|
||||
@BeforeClass
|
||||
public static void init() {
|
||||
sessionFactory = HibernateUtil.getSessionFactory();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAccessUserRolesInsideSession_thenSuccess() {
|
||||
|
||||
User detachedUser = createUserWithRoles();
|
||||
|
||||
Session session = sessionFactory.openSession();
|
||||
session.beginTransaction();
|
||||
|
||||
User persistentUser = session.find(User.class, detachedUser.getId());
|
||||
|
||||
Assert.assertEquals(2, persistentUser.getRoles().size());
|
||||
|
||||
session.getTransaction().commit();
|
||||
session.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAccessUserRolesOutsideSession_thenThrownException() {
|
||||
|
||||
User detachedUser = createUserWithRoles();
|
||||
|
||||
Session session = sessionFactory.openSession();
|
||||
session.beginTransaction();
|
||||
|
||||
User persistentUser = session.find(User.class, detachedUser.getId());
|
||||
|
||||
session.getTransaction().commit();
|
||||
session.close();
|
||||
|
||||
thrown.expect(LazyInitializationException.class);
|
||||
System.out.println(persistentUser.getRoles().size());
|
||||
}
|
||||
|
||||
private User createUserWithRoles() {
|
||||
|
||||
Role admin = new Role("Admin");
|
||||
Role dba = new Role("DBA");
|
||||
|
||||
User user = new User("Bob", "Smith");
|
||||
|
||||
user.addRole(admin);
|
||||
user.addRole(dba);
|
||||
|
||||
Session session = sessionFactory.openSession();
|
||||
session.beginTransaction();
|
||||
user.getRoles().forEach(role -> session.save(role));
|
||||
session.save(user);
|
||||
session.getTransaction().commit();
|
||||
session.close();
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void cleanUp() {
|
||||
sessionFactory.close();
|
||||
}
|
||||
}
|
||||
@@ -13,4 +13,5 @@ This module contains articles about the Java Persistence API (JPA) in Java.
|
||||
- [JPA Annotation for the PostgreSQL TEXT Type](https://www.baeldung.com/jpa-annotation-postgresql-text-type)
|
||||
- [Mapping a Single Entity to Multiple Tables in JPA](https://www.baeldung.com/jpa-mapping-single-entity-to-multiple-tables)
|
||||
- [Constructing a JPA Query Between Unrelated Entities](https://www.baeldung.com/jpa-query-unrelated-entities)
|
||||
- [When Does JPA Set the Primary Key](https://www.baeldung.com/jpa-strategies-when-set-primary-key)
|
||||
- More articles: [[<-- prev]](/java-jpa)
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.baeldung.jpa.generateidvalue;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "app_admin")
|
||||
public class Admin {
|
||||
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private Long id;
|
||||
|
||||
@Column(name = "admin_name")
|
||||
private String name;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package com.baeldung.jpa.generateidvalue;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.SequenceGenerator;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "article")
|
||||
public class Article {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "article_gen")
|
||||
@SequenceGenerator(name = "article_gen", sequenceName = "article_seq")
|
||||
private Long id;
|
||||
|
||||
@Column(name = "article_name")
|
||||
private String name;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
package com.baeldung.jpa.generateidvalue;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Table(name = "id_gen")
|
||||
@Entity
|
||||
public class IdGenerator {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(name = "gen_name")
|
||||
private String gen_name;
|
||||
|
||||
@Column(name = "gen_value")
|
||||
private Long gen_value;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getGen_name() {
|
||||
return gen_name;
|
||||
}
|
||||
|
||||
public void setGen_name(String gen_name) {
|
||||
this.gen_name = gen_name;
|
||||
}
|
||||
|
||||
public Long getGen_value() {
|
||||
return gen_value;
|
||||
}
|
||||
|
||||
public void setGen_value(Long gen_value) {
|
||||
this.gen_value = gen_value;
|
||||
}
|
||||
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package com.baeldung.jpa.generateidvalue;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.TableGenerator;
|
||||
|
||||
@Entity
|
||||
@Table(name = "task")
|
||||
public class Task {
|
||||
|
||||
@Id
|
||||
@TableGenerator(name = "id_generator", table = "id_gen", pkColumnName = "gen_name", valueColumnName = "gen_value", pkColumnValue = "task_gen", initialValue = 10000, allocationSize = 10)
|
||||
@GeneratedValue(strategy = GenerationType.TABLE, generator = "id_generator")
|
||||
private Long id;
|
||||
|
||||
@Column(name = "name")
|
||||
private String name;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
package com.baeldung.jpa.generateidvalue;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "app_user")
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(name = "user_name")
|
||||
private String name;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -184,4 +184,29 @@
|
||||
value="false" />
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
|
||||
<persistence-unit name="jpa-h2-primarykey">
|
||||
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
|
||||
<class>com.baeldung.jpa.generateidvalue.Admin</class>
|
||||
<class>com.baeldung.jpa.generateidvalue.Article</class>
|
||||
<class>com.baeldung.jpa.generateidvalue.IdGenerator</class>
|
||||
<class>com.baeldung.jpa.generateidvalue.Task</class>
|
||||
<class>com.baeldung.jpa.generateidvalue.User</class>
|
||||
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
||||
<properties>
|
||||
<property name="javax.persistence.jdbc.driver"
|
||||
value="org.h2.Driver" />
|
||||
<property name="javax.persistence.jdbc.url"
|
||||
value="jdbc:h2:mem:test" />
|
||||
<property name="javax.persistence.jdbc.user" value="sa" />
|
||||
<property name="javax.persistence.jdbc.password" value="" />
|
||||
<property name="javax.persistence.sql-load-script-source"
|
||||
value="primary_key_generator.sql" />
|
||||
<property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
|
||||
<property name="eclipselink.ddl-generation.output-mode" value="database" />
|
||||
<property name="eclipselink.weaving" value="static" />
|
||||
<property name="eclipselink.logging.level" value="FINE" />
|
||||
<property name="eclipselink.jdbc.allow-native-sql-queries" value="true" />
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
</persistence>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
CREATE SEQUENCE article_seq MINVALUE 1 START WITH 50 INCREMENT BY 50;
|
||||
|
||||
INSERT INTO id_gen (gen_name, gen_val) VALUES ('id_generator', 0);
|
||||
INSERT INTO id_gen (gen_name, gen_val) VALUES ('task_gen', 10000);
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
package com.baeldung.jpa.generateidvalue;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import javax.persistence.Persistence;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* PrimaryKeyGeneratorTest class
|
||||
*
|
||||
* @author [email protected]
|
||||
*/
|
||||
public class PrimaryKeyUnitTest {
|
||||
private static EntityManager entityManager;
|
||||
|
||||
@BeforeClass
|
||||
public static void setup() {
|
||||
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa-h2-primarykey");
|
||||
entityManager = factory.createEntityManager();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenIdentityStrategy_whenCommitTransction_thenReturnPrimaryKey() {
|
||||
User user = new User();
|
||||
user.setName("TestName");
|
||||
|
||||
entityManager.getTransaction()
|
||||
.begin();
|
||||
entityManager.persist(user);
|
||||
Assert.assertNull(user.getId());
|
||||
entityManager.getTransaction()
|
||||
.commit();
|
||||
|
||||
Long expectPrimaryKey = 1L;
|
||||
Assert.assertEquals(expectPrimaryKey, user.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenTableStrategy_whenPersist_thenReturnPrimaryKey() {
|
||||
Task task = new Task();
|
||||
task.setName("Test Task");
|
||||
|
||||
entityManager.getTransaction()
|
||||
.begin();
|
||||
entityManager.persist(task);
|
||||
Long expectPrimaryKey = 10000L;
|
||||
Assert.assertEquals(expectPrimaryKey, task.getId());
|
||||
|
||||
entityManager.getTransaction()
|
||||
.commit();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenSequenceStrategy_whenPersist_thenReturnPrimaryKey() {
|
||||
Article article = new Article();
|
||||
article.setName("Test Name");
|
||||
|
||||
entityManager.getTransaction()
|
||||
.begin();
|
||||
entityManager.persist(article);
|
||||
Long expectPrimaryKey = 51L;
|
||||
Assert.assertEquals(expectPrimaryKey, article.getId());
|
||||
|
||||
entityManager.getTransaction()
|
||||
.commit();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAutoStrategy_whenPersist_thenReturnPrimaryKey() {
|
||||
Admin admin = new Admin();
|
||||
admin.setName("Test Name");
|
||||
|
||||
entityManager.persist(admin);
|
||||
|
||||
Long expectPrimaryKey = 1L;
|
||||
Assert.assertEquals(expectPrimaryKey, admin.getId());
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.baeldung.examples.r2dbc</groupId>
|
||||
<artifactId>r2dbc-example</artifactId>
|
||||
<artifactId>r2dbc</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>r2dbc</name>
|
||||
<description>Sample R2DBC Project</description>
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
- [Introduction to Lettuce – the Java Redis Client](https://www.baeldung.com/java-redis-lettuce)
|
||||
- [List All Available Redis Keys](https://www.baeldung.com/redis-list-available-keys)
|
||||
- [Spring Data Redis’s Property-Based Configuration](https://www.baeldung.com/spring-data-redis-properties)
|
||||
- [Delete Everything in Redis](https://www.baeldung.com/redis-delete-data)
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
<dependency>
|
||||
<groupId>redis.clients</groupId>
|
||||
<artifactId>jedis</artifactId>
|
||||
</dependency>
|
||||
<version>3.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.kstyrc</groupId>
|
||||
<artifactId>embedded-redis</artifactId>
|
||||
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
package com.baeldung.redis.deleteeverything;
|
||||
|
||||
import org.junit.*;
|
||||
import redis.clients.jedis.Jedis;
|
||||
import redis.embedded.RedisServer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.ServerSocket;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
public class DeleteEverythingInRedisIntegrationTest {
|
||||
private Jedis jedis;
|
||||
private RedisServer redisServer;
|
||||
private int port;
|
||||
|
||||
@Before
|
||||
public void setUp() throws IOException {
|
||||
|
||||
// Take an available port
|
||||
ServerSocket s = new ServerSocket(0);
|
||||
port = s.getLocalPort();
|
||||
s.close();
|
||||
|
||||
redisServer = new RedisServer(port);
|
||||
redisServer.start();
|
||||
|
||||
// Configure JEDIS
|
||||
jedis = new Jedis("localhost", port);
|
||||
}
|
||||
|
||||
@After
|
||||
public void destroy() {
|
||||
redisServer.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPutDataIntoRedis_thenCanBeFound() {
|
||||
String key = "key";
|
||||
String value = "value";
|
||||
|
||||
jedis.set(key, value);
|
||||
String received = jedis.get(key);
|
||||
|
||||
assertEquals(value, received);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPutDataIntoRedisAndThenFlush_thenCannotBeFound() {
|
||||
String key = "key";
|
||||
String value = "value";
|
||||
|
||||
jedis.set(key, value);
|
||||
|
||||
jedis.flushDB();
|
||||
|
||||
String received = jedis.get(key);
|
||||
|
||||
assertNull(received);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPutDataIntoMultipleDatabases_thenFlushAllRemovesAll() {
|
||||
// add keys in different databases
|
||||
jedis.select(0);
|
||||
jedis.set("key1", "value1");
|
||||
jedis.select(1);
|
||||
jedis.set("key2", "value2");
|
||||
|
||||
// we'll find the correct keys in the correct dbs
|
||||
jedis.select(0);
|
||||
assertEquals("value1", jedis.get("key1"));
|
||||
assertNull(jedis.get("key2"));
|
||||
|
||||
jedis.select(1);
|
||||
assertEquals("value2", jedis.get("key2"));
|
||||
assertNull(jedis.get("key1"));
|
||||
|
||||
// then, when we flush
|
||||
jedis.flushAll();
|
||||
|
||||
// the keys will have gone
|
||||
jedis.select(0);
|
||||
assertNull(jedis.get("key1"));
|
||||
assertNull(jedis.get("key2"));
|
||||
jedis.select(1);
|
||||
assertNull(jedis.get("key1"));
|
||||
assertNull(jedis.get("key2"));
|
||||
}
|
||||
}
|
||||
@@ -40,11 +40,6 @@
|
||||
<artifactId>db-util</artifactId>
|
||||
<version>${db-util.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.bytebuddy</groupId>
|
||||
<artifactId>byte-buddy</artifactId>
|
||||
<version>${byte-buddy.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
|
||||
@@ -77,7 +77,6 @@
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<mockito.version>2.23.0</mockito.version>
|
||||
<validation-api.version>2.0.1.Final</validation-api.version>
|
||||
<spring-boot.version>2.1.7.RELEASE</spring-boot.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -15,13 +15,7 @@
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-core</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<artifactId>spring-web</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
|
||||
@@ -36,6 +30,7 @@
|
||||
<artifactId>elasticsearch</artifactId>
|
||||
<version>${elasticsearch.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
@@ -49,8 +44,8 @@
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.vividsolutions</groupId>
|
||||
<artifactId>jts</artifactId>
|
||||
<groupId>org.locationtech.jts</groupId>
|
||||
<artifactId>jts-core</artifactId>
|
||||
<version>${jts.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
@@ -60,41 +55,19 @@
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-core</artifactId>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.elasticsearch.client</groupId>
|
||||
<artifactId>transport</artifactId>
|
||||
<version>${elasticsearch.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.java.dev.jna</groupId>
|
||||
<artifactId>jna</artifactId>
|
||||
<version>${jna.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<spring-data-elasticsearch.version>3.0.8.RELEASE</spring-data-elasticsearch.version>
|
||||
<jna.version>4.5.2</jna.version>
|
||||
<elasticsearch.version>5.6.0</elasticsearch.version>
|
||||
<spring-data-elasticsearch.version>4.0.0.RELEASE</spring-data-elasticsearch.version>
|
||||
<elasticsearch.version>7.6.2</elasticsearch.version>
|
||||
<fastjson.version>1.2.47</fastjson.version>
|
||||
<spatial4j.version>0.6</spatial4j.version>
|
||||
<jts.version>1.13</jts.version>
|
||||
<log4j.version>2.9.1</log4j.version>
|
||||
<spatial4j.version>0.7</spatial4j.version>
|
||||
<jts.version>1.15.0</jts.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
+12
-30
@@ -1,19 +1,13 @@
|
||||
package com.baeldung.spring.data.es.config;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.client.transport.TransportClient;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.transport.InetSocketTransportAddress;
|
||||
import org.elasticsearch.transport.client.PreBuiltTransportClient;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.elasticsearch.client.RestHighLevelClient;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.elasticsearch.client.ClientConfiguration;
|
||||
import org.springframework.data.elasticsearch.client.RestClients;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
|
||||
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
|
||||
|
||||
@Configuration
|
||||
@@ -21,30 +15,18 @@ import org.springframework.data.elasticsearch.repository.config.EnableElasticsea
|
||||
@ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" })
|
||||
public class Config {
|
||||
|
||||
@Value("${elasticsearch.home:/usr/local/Cellar/elasticsearch/5.6.0}")
|
||||
private String elasticsearchHome;
|
||||
|
||||
@Value("${elasticsearch.cluster.name:elasticsearch}")
|
||||
private String clusterName;
|
||||
|
||||
@Bean
|
||||
public Client client() {
|
||||
TransportClient client = null;
|
||||
try {
|
||||
final Settings elasticsearchSettings = Settings.builder()
|
||||
.put("client.transport.sniff", true)
|
||||
.put("path.home", elasticsearchHome)
|
||||
.put("cluster.name", clusterName).build();
|
||||
client = new PreBuiltTransportClient(elasticsearchSettings);
|
||||
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return client;
|
||||
RestHighLevelClient client() {
|
||||
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
|
||||
.connectedTo("localhost:9200")
|
||||
.build();
|
||||
|
||||
return RestClients.create(clientConfiguration)
|
||||
.rest();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ElasticsearchOperations elasticsearchTemplate() {
|
||||
return new ElasticsearchTemplate(client());
|
||||
return new ElasticsearchRestTemplate(client());
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -1,7 +1,12 @@
|
||||
package com.baeldung.spring.data.es.model;
|
||||
|
||||
import static org.springframework.data.elasticsearch.annotations.FieldType.Text;
|
||||
|
||||
import org.springframework.data.elasticsearch.annotations.Field;
|
||||
|
||||
public class Author {
|
||||
|
||||
@Field(type = Text)
|
||||
private String name;
|
||||
|
||||
public Author() {
|
||||
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
package com.baeldung.spring.data.es.service;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import com.baeldung.spring.data.es.model.Article;
|
||||
|
||||
public interface ArticleService {
|
||||
Article save(Article article);
|
||||
|
||||
Optional<Article> findOne(String id);
|
||||
|
||||
Iterable<Article> findAll();
|
||||
|
||||
Page<Article> findByAuthorName(String name, Pageable pageable);
|
||||
|
||||
Page<Article> findByAuthorNameUsingCustomQuery(String name, Pageable pageable);
|
||||
|
||||
Page<Article> findByFilteredTagQuery(String tag, Pageable pageable);
|
||||
|
||||
Page<Article> findByAuthorsNameAndFilteredTagQuery(String name, String tag, Pageable pageable);
|
||||
|
||||
long count();
|
||||
|
||||
void delete(Article article);
|
||||
}
|
||||
-67
@@ -1,67 +0,0 @@
|
||||
package com.baeldung.spring.data.es.service;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baeldung.spring.data.es.model.Article;
|
||||
import com.baeldung.spring.data.es.repository.ArticleRepository;
|
||||
|
||||
@Service
|
||||
public class ArticleServiceImpl implements ArticleService {
|
||||
|
||||
private final ArticleRepository articleRepository;
|
||||
|
||||
@Autowired
|
||||
public ArticleServiceImpl(ArticleRepository articleRepository) {
|
||||
this.articleRepository = articleRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Article save(Article article) {
|
||||
return articleRepository.save(article);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Article> findOne(String id) {
|
||||
return articleRepository.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Article> findAll() {
|
||||
return articleRepository.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Article> findByAuthorName(String name, Pageable pageable) {
|
||||
return articleRepository.findByAuthorsName(name, pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Article> findByAuthorNameUsingCustomQuery(String name, Pageable pageable) {
|
||||
return articleRepository.findByAuthorsNameUsingCustomQuery(name, pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Article> findByFilteredTagQuery(String tag, Pageable pageable) {
|
||||
return articleRepository.findByFilteredTagQuery(tag, pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Article> findByAuthorsNameAndFilteredTagQuery(String name, String tag, Pageable pageable) {
|
||||
return articleRepository.findByAuthorsNameAndFilteredTagQuery(name, tag, pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long count() {
|
||||
return articleRepository.count();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(Article article) {
|
||||
articleRepository.delete(article);
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -8,10 +8,10 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import com.baeldung.spring.data.es.config.Config;
|
||||
|
||||
/**
|
||||
* This Manual test requires: Elasticsearch instance running on localhost:9200.
|
||||
*
|
||||
* This Manual test requires:
|
||||
* * Elasticsearch instance running on host
|
||||
*
|
||||
* The following docker command can be used: docker run -d --name es762 -p
|
||||
* 9200:9200 -e "discovery.type=single-node" elasticsearch:7.6.2
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(classes = Config.class)
|
||||
|
||||
+103
-91
@@ -3,43 +3,48 @@ package com.baeldung.elasticsearch;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
|
||||
import org.elasticsearch.action.DocWriteResponse.Result;
|
||||
import org.elasticsearch.action.delete.DeleteRequest;
|
||||
import org.elasticsearch.action.delete.DeleteResponse;
|
||||
import org.elasticsearch.action.get.GetRequest;
|
||||
import org.elasticsearch.action.get.GetResponse;
|
||||
import org.elasticsearch.action.index.IndexRequest;
|
||||
import org.elasticsearch.action.index.IndexResponse;
|
||||
import org.elasticsearch.action.search.SearchRequest;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
import org.elasticsearch.action.search.SearchType;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.transport.InetSocketTransportAddress;
|
||||
import org.elasticsearch.client.RequestOptions;
|
||||
import org.elasticsearch.client.RestHighLevelClient;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
import org.elasticsearch.transport.client.PreBuiltTransportClient;
|
||||
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.springframework.data.elasticsearch.client.ClientConfiguration;
|
||||
import org.springframework.data.elasticsearch.client.RestClients;
|
||||
|
||||
/**
|
||||
* This Manual test requires: Elasticsearch instance running on localhost:9200.
|
||||
*
|
||||
* This Manual test requires:
|
||||
* * Elasticsearch instance running on host
|
||||
* * with cluster name = elasticsearch
|
||||
*
|
||||
* The following docker command can be used: docker run -d --name es762 -p
|
||||
* 9200:9200 -e "discovery.type=single-node" elasticsearch:7.6.2
|
||||
*/
|
||||
public class ElasticSearchManualTest {
|
||||
private List<Person> listOfPersons = new ArrayList<>();
|
||||
private Client client = null;
|
||||
private RestHighLevelClient client = null;
|
||||
|
||||
@Before
|
||||
public void setUp() throws UnknownHostException {
|
||||
@@ -47,115 +52,122 @@ public class ElasticSearchManualTest {
|
||||
Person person2 = new Person(25, "Janette Doe", new Date());
|
||||
listOfPersons.add(person1);
|
||||
listOfPersons.add(person2);
|
||||
|
||||
client = new PreBuiltTransportClient(Settings.builder().put("client.transport.sniff", true)
|
||||
.put("cluster.name","elasticsearch").build())
|
||||
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
|
||||
|
||||
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
|
||||
.connectedTo("localhost:9200")
|
||||
.build();
|
||||
client = RestClients.create(clientConfiguration)
|
||||
.rest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenJsonString_whenJavaObject_thenIndexDocument() {
|
||||
public void givenJsonString_whenJavaObject_thenIndexDocument() throws Exception {
|
||||
String jsonObject = "{\"age\":20,\"dateOfBirth\":1471466076564,\"fullName\":\"John Doe\"}";
|
||||
IndexResponse response = client
|
||||
.prepareIndex("people", "Doe")
|
||||
.setSource(jsonObject, XContentType.JSON)
|
||||
.get();
|
||||
IndexRequest request = new IndexRequest("people");
|
||||
request.source(jsonObject, XContentType.JSON);
|
||||
|
||||
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
|
||||
String index = response.getIndex();
|
||||
String type = response.getType();
|
||||
long version = response.getVersion();
|
||||
|
||||
assertEquals(Result.CREATED, response.getResult());
|
||||
assertEquals(index, "people");
|
||||
assertEquals(type, "Doe");
|
||||
assertEquals(1, version);
|
||||
assertEquals("people", index);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenDocumentId_whenJavaObject_thenDeleteDocument() {
|
||||
public void givenDocumentId_whenJavaObject_thenDeleteDocument() throws Exception {
|
||||
String jsonObject = "{\"age\":10,\"dateOfBirth\":1471455886564,\"fullName\":\"Johan Doe\"}";
|
||||
IndexResponse response = client
|
||||
.prepareIndex("people", "Doe")
|
||||
.setSource(jsonObject, XContentType.JSON)
|
||||
.get();
|
||||
IndexRequest indexRequest = new IndexRequest("people");
|
||||
indexRequest.source(jsonObject, XContentType.JSON);
|
||||
|
||||
IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
|
||||
String id = response.getId();
|
||||
DeleteResponse deleteResponse = client
|
||||
.prepareDelete("people", "Doe", id)
|
||||
.get();
|
||||
|
||||
assertEquals(Result.DELETED,deleteResponse.getResult());
|
||||
GetRequest getRequest = new GetRequest("people");
|
||||
getRequest.id(id);
|
||||
|
||||
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
|
||||
System.out.println(getResponse.getSourceAsString());
|
||||
|
||||
DeleteRequest deleteRequest = new DeleteRequest("people");
|
||||
deleteRequest.id(id);
|
||||
|
||||
DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
|
||||
|
||||
assertEquals(Result.DELETED, deleteResponse.getResult());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenSearchRequest_whenMatchAll_thenReturnAllResults() {
|
||||
SearchResponse response = client
|
||||
.prepareSearch()
|
||||
.execute()
|
||||
.actionGet();
|
||||
SearchHit[] searchHits = response
|
||||
.getHits()
|
||||
.getHits();
|
||||
public void givenSearchRequest_whenMatchAll_thenReturnAllResults() throws Exception {
|
||||
SearchRequest searchRequest = new SearchRequest();
|
||||
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
|
||||
SearchHit[] searchHits = response.getHits()
|
||||
.getHits();
|
||||
List<Person> results = Arrays.stream(searchHits)
|
||||
.map(hit -> JSON.parseObject(hit.getSourceAsString(), Person.class))
|
||||
.collect(Collectors.toList());
|
||||
.map(hit -> JSON.parseObject(hit.getSourceAsString(), Person.class))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
results.forEach(System.out::println);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenSearchParameters_thenReturnResults() {
|
||||
SearchResponse response = client
|
||||
.prepareSearch()
|
||||
.setTypes()
|
||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||
.setPostFilter(QueryBuilders
|
||||
.rangeQuery("age")
|
||||
public void givenSearchParameters_thenReturnResults() throws Exception {
|
||||
SearchSourceBuilder builder = new SearchSourceBuilder().postFilter(QueryBuilders.rangeQuery("age")
|
||||
.from(5)
|
||||
.to(15))
|
||||
.setFrom(0)
|
||||
.setSize(60)
|
||||
.setExplain(true)
|
||||
.execute()
|
||||
.actionGet();
|
||||
.to(15));
|
||||
|
||||
SearchResponse response2 = client
|
||||
.prepareSearch()
|
||||
.setTypes()
|
||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||
.setPostFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette"))
|
||||
.setFrom(0)
|
||||
.setSize(60)
|
||||
.setExplain(true)
|
||||
.execute()
|
||||
.actionGet();
|
||||
SearchRequest searchRequest = new SearchRequest();
|
||||
searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
|
||||
searchRequest.source(builder);
|
||||
|
||||
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
|
||||
|
||||
builder = new SearchSourceBuilder().postFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette"));
|
||||
|
||||
searchRequest = new SearchRequest();
|
||||
searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
|
||||
searchRequest.source(builder);
|
||||
|
||||
SearchResponse response2 = client.search(searchRequest, RequestOptions.DEFAULT);
|
||||
|
||||
builder = new SearchSourceBuilder().postFilter(QueryBuilders.matchQuery("John", "Name*"));
|
||||
searchRequest = new SearchRequest();
|
||||
searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
|
||||
searchRequest.source(builder);
|
||||
|
||||
SearchResponse response3 = client.search(searchRequest, RequestOptions.DEFAULT);
|
||||
|
||||
SearchResponse response3 = client
|
||||
.prepareSearch()
|
||||
.setTypes()
|
||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||
.setPostFilter(QueryBuilders.matchQuery("John", "Name*"))
|
||||
.setFrom(0)
|
||||
.setSize(60)
|
||||
.setExplain(true)
|
||||
.execute()
|
||||
.actionGet();
|
||||
response2.getHits();
|
||||
response3.getHits();
|
||||
|
||||
final List<Person> results = Arrays.stream(response.getHits().getHits())
|
||||
.map(hit -> JSON.parseObject(hit.getSourceAsString(), Person.class))
|
||||
.collect(Collectors.toList());
|
||||
final List<Person> results = Stream.of(response.getHits()
|
||||
.getHits(),
|
||||
response2.getHits()
|
||||
.getHits(),
|
||||
response3.getHits()
|
||||
.getHits())
|
||||
.flatMap(Arrays::stream)
|
||||
.map(hit -> JSON.parseObject(hit.getSourceAsString(), Person.class))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
results.forEach(System.out::println);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenContentBuilder_whenHelpers_thanIndexJson() throws IOException {
|
||||
XContentBuilder builder = XContentFactory
|
||||
.jsonBuilder()
|
||||
.startObject()
|
||||
.field("fullName", "Test")
|
||||
.field("salary", "11500")
|
||||
.field("age", "10")
|
||||
.endObject();
|
||||
IndexResponse response = client
|
||||
.prepareIndex("people", "Doe")
|
||||
.setSource(builder)
|
||||
.get();
|
||||
XContentBuilder builder = XContentFactory.jsonBuilder()
|
||||
.startObject()
|
||||
.field("fullName", "Test")
|
||||
.field("salary", "11500")
|
||||
.field("age", "10")
|
||||
.endObject();
|
||||
|
||||
assertEquals(Result.CREATED, response.getResult());
|
||||
IndexRequest indexRequest = new IndexRequest("people");
|
||||
indexRequest.source(builder);
|
||||
|
||||
IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
|
||||
|
||||
assertEquals(Result.CREATED, response.getResult());
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user