commit
b59d268361
|
@ -106,7 +106,7 @@
|
||||||
<arguments>
|
<arguments>
|
||||||
<argument>java</argument>
|
<argument>java</argument>
|
||||||
<argument>-jar</argument>
|
<argument>-jar</argument>
|
||||||
<argument>sample-blade-app.jar</argument>
|
<argument>blade.jar</argument>
|
||||||
</arguments>
|
</arguments>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
|
|
@ -73,6 +73,28 @@
|
||||||
<version>${cache2k.version}</version>
|
<version>${cache2k.version}</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.squareup.moshi</groupId>
|
||||||
|
<artifactId>moshi</artifactId>
|
||||||
|
<version>${moshi.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.squareup.moshi</groupId>
|
||||||
|
<artifactId>moshi-adapters</artifactId>
|
||||||
|
<version>${moshi.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jcabi</groupId>
|
||||||
|
<artifactId>jcabi-aspects</artifactId>
|
||||||
|
<version>${jcabi-aspects.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.aspectj</groupId>
|
||||||
|
<artifactId>aspectjrt</artifactId>
|
||||||
|
<version>${aspectjrt.version}</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
@ -82,6 +104,36 @@
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>libraries-3</finalName>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>com.jcabi</groupId>
|
||||||
|
<artifactId>jcabi-maven-plugin</artifactId>
|
||||||
|
<version>${jcabi-maven-plugin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>ajc</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.aspectj</groupId>
|
||||||
|
<artifactId>aspectjtools</artifactId>
|
||||||
|
<version>${aspectjtools.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.aspectj</groupId>
|
||||||
|
<artifactId>aspectjweaver</artifactId>
|
||||||
|
<version>${aspectjweaver.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<jcommander.version>1.78</jcommander.version>
|
<jcommander.version>1.78</jcommander.version>
|
||||||
<lombok.version>1.18.6</lombok.version>
|
<lombok.version>1.18.6</lombok.version>
|
||||||
|
@ -93,5 +145,11 @@
|
||||||
<cactoos.version>0.43</cactoos.version>
|
<cactoos.version>0.43</cactoos.version>
|
||||||
<airline.version>2.7.2</airline.version>
|
<airline.version>2.7.2</airline.version>
|
||||||
<cache2k.version>1.2.3.Final</cache2k.version>
|
<cache2k.version>1.2.3.Final</cache2k.version>
|
||||||
|
<moshi.version>1.9.2</moshi.version>
|
||||||
|
<jcabi-aspects.version>0.22.6</jcabi-aspects.version>
|
||||||
|
<aspectjrt.version>1.9.2</aspectjrt.version>
|
||||||
|
<jcabi-maven-plugin.version>0.14.1</jcabi-maven-plugin.version>
|
||||||
|
<aspectjtools.version>1.9.2</aspectjtools.version>
|
||||||
|
<aspectjweaver.version>1.9.2</aspectjweaver.version>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -4,38 +4,33 @@ import java.util.Objects;
|
||||||
|
|
||||||
import org.cache2k.Cache;
|
import org.cache2k.Cache;
|
||||||
import org.cache2k.Cache2kBuilder;
|
import org.cache2k.Cache2kBuilder;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class ProductHelper {
|
public class ProductHelper {
|
||||||
|
|
||||||
final Logger LOGGER = LoggerFactory.getLogger(ProductHelper.class);
|
|
||||||
|
|
||||||
private Cache<String, Integer> cachedDiscounts;
|
private Cache<String, Integer> cachedDiscounts;
|
||||||
|
|
||||||
|
private int cacheMissCount = 0;
|
||||||
|
|
||||||
public ProductHelper() {
|
public ProductHelper() {
|
||||||
cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class)
|
cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class)
|
||||||
.name("discount")
|
.name("discount")
|
||||||
.eternal(true)
|
.eternal(true)
|
||||||
.entryCapacity(100)
|
.entryCapacity(100)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
initDiscountCache("Sports", 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initDiscountCache(String productType, Integer value) {
|
|
||||||
cachedDiscounts.put(productType, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getDiscount(String productType) {
|
public Integer getDiscount(String productType) {
|
||||||
Integer discount = cachedDiscounts.get(productType);
|
Integer discount = cachedDiscounts.get(productType);
|
||||||
if (Objects.isNull(discount)) {
|
if (Objects.isNull(discount)) {
|
||||||
LOGGER.info("Discount for {} not found.", productType);
|
cacheMissCount++;
|
||||||
discount = 0;
|
discount = "Sports".equalsIgnoreCase(productType) ? 20 : 10;
|
||||||
} else {
|
cachedDiscounts.put(productType, discount);
|
||||||
LOGGER.info("Discount for {} found.", productType);
|
|
||||||
}
|
}
|
||||||
return discount;
|
return discount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getCacheMissCount() {
|
||||||
|
return cacheMissCount;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package com.baeldung.cache2k;
|
package com.baeldung.cache2k;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.cache2k.Cache;
|
import org.cache2k.Cache;
|
||||||
|
@ -14,28 +13,26 @@ public class ProductHelperUsingLoader {
|
||||||
|
|
||||||
private Cache<String, Integer> cachedDiscounts;
|
private Cache<String, Integer> cachedDiscounts;
|
||||||
|
|
||||||
|
private int cacheMissCount = 0;
|
||||||
|
|
||||||
public ProductHelperUsingLoader() {
|
public ProductHelperUsingLoader() {
|
||||||
cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class)
|
cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class)
|
||||||
.name("discount-loader")
|
.name("discount-loader")
|
||||||
.eternal(false)
|
|
||||||
.expireAfterWrite(10, TimeUnit.MILLISECONDS)
|
.expireAfterWrite(10, TimeUnit.MILLISECONDS)
|
||||||
.entryCapacity(100)
|
.entryCapacity(100)
|
||||||
.loader((key) -> {
|
.loader((key) -> {
|
||||||
LOGGER.info("Calculating discount for {}.", key);
|
cacheMissCount++;
|
||||||
return "Sports".equalsIgnoreCase(key) ? 20 : 10;
|
return "Sports".equalsIgnoreCase(key) ? 20 : 10;
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getDiscount(String productType) {
|
public Integer getDiscount(String productType) {
|
||||||
Integer discount = cachedDiscounts.get(productType);
|
return cachedDiscounts.get(productType);
|
||||||
if (Objects.isNull(discount)) {
|
}
|
||||||
LOGGER.info("Discount for {} not found.", productType);
|
|
||||||
discount = 0;
|
public int getCacheMissCount() {
|
||||||
} else {
|
return cacheMissCount;
|
||||||
LOGGER.info("Discount for {} found.", productType);
|
|
||||||
}
|
|
||||||
return discount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package com.baeldung.cache2k;
|
package com.baeldung.cache2k;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.cache2k.Cache;
|
import org.cache2k.Cache;
|
||||||
|
@ -16,14 +15,15 @@ public class ProductHelperWithEventListener {
|
||||||
|
|
||||||
private Cache<String, Integer> cachedDiscounts;
|
private Cache<String, Integer> cachedDiscounts;
|
||||||
|
|
||||||
|
private int cacheMissCount = 0;
|
||||||
|
|
||||||
public ProductHelperWithEventListener() {
|
public ProductHelperWithEventListener() {
|
||||||
cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class)
|
cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class)
|
||||||
.name("discount-listener")
|
.name("discount-listener")
|
||||||
.eternal(false)
|
|
||||||
.expireAfterWrite(10, TimeUnit.MILLISECONDS)
|
.expireAfterWrite(10, TimeUnit.MILLISECONDS)
|
||||||
.entryCapacity(100)
|
.entryCapacity(100)
|
||||||
.loader((key) -> {
|
.loader((key) -> {
|
||||||
LOGGER.info("Calculating discount for {}.", key);
|
cacheMissCount++;
|
||||||
return "Sports".equalsIgnoreCase(key) ? 20 : 10;
|
return "Sports".equalsIgnoreCase(key) ? 20 : 10;
|
||||||
})
|
})
|
||||||
.addListener(new CacheEntryCreatedListener<String, Integer>() {
|
.addListener(new CacheEntryCreatedListener<String, Integer>() {
|
||||||
|
@ -36,14 +36,11 @@ public class ProductHelperWithEventListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getDiscount(String productType) {
|
public Integer getDiscount(String productType) {
|
||||||
Integer discount = cachedDiscounts.get(productType);
|
return cachedDiscounts.get(productType);
|
||||||
if (Objects.isNull(discount)) {
|
}
|
||||||
LOGGER.info("Discount for {} not found.", productType);
|
|
||||||
discount = 0;
|
public int getCacheMissCount() {
|
||||||
} else {
|
return cacheMissCount;
|
||||||
LOGGER.info("Discount for {} found.", productType);
|
|
||||||
}
|
|
||||||
return discount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,39 +5,34 @@ import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.cache2k.Cache;
|
import org.cache2k.Cache;
|
||||||
import org.cache2k.Cache2kBuilder;
|
import org.cache2k.Cache2kBuilder;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class ProductHelperWithExpiry {
|
public class ProductHelperWithExpiry {
|
||||||
|
|
||||||
final Logger LOGGER = LoggerFactory.getLogger(ProductHelperWithExpiry.class);
|
|
||||||
|
|
||||||
private Cache<String, Integer> cachedDiscounts;
|
private Cache<String, Integer> cachedDiscounts;
|
||||||
|
|
||||||
|
private int cacheMissCount = 0;
|
||||||
|
|
||||||
public ProductHelperWithExpiry() {
|
public ProductHelperWithExpiry() {
|
||||||
cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class)
|
cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class)
|
||||||
.name("discount-expiry")
|
.name("discount-expiry")
|
||||||
.eternal(false)
|
|
||||||
.expireAfterWrite(5, TimeUnit.MILLISECONDS)
|
.expireAfterWrite(5, TimeUnit.MILLISECONDS)
|
||||||
.entryCapacity(100)
|
.entryCapacity(100)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
initDiscountCache("Sports", 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initDiscountCache(String productType, Integer value) {
|
|
||||||
cachedDiscounts.put(productType, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getDiscount(String productType) {
|
public Integer getDiscount(String productType) {
|
||||||
Integer discount = cachedDiscounts.get(productType);
|
Integer discount = cachedDiscounts.get(productType);
|
||||||
if (Objects.isNull(discount)) {
|
if (Objects.isNull(discount)) {
|
||||||
LOGGER.info("Discount for {} not found.", productType);
|
cacheMissCount++;
|
||||||
discount = 0;
|
discount = "Sports".equalsIgnoreCase(productType) ? 20 : 10;
|
||||||
} else {
|
cachedDiscounts.put(productType, discount);
|
||||||
LOGGER.info("Discount for {} found.", productType);
|
|
||||||
}
|
}
|
||||||
return discount;
|
return discount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getCacheMissCount() {
|
||||||
|
return cacheMissCount;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
package com.baeldung.jcabi;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import com.jcabi.aspects.Async;
|
||||||
|
import com.jcabi.aspects.Cacheable;
|
||||||
|
import com.jcabi.aspects.LogExceptions;
|
||||||
|
import com.jcabi.aspects.Loggable;
|
||||||
|
import com.jcabi.aspects.Quietly;
|
||||||
|
import com.jcabi.aspects.RetryOnFailure;
|
||||||
|
import com.jcabi.aspects.UnitedThrow;
|
||||||
|
|
||||||
|
public class JcabiAspectJ {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
displayFactorial(10);
|
||||||
|
getFactorial(10).get();
|
||||||
|
|
||||||
|
String result = cacheExchangeRates();
|
||||||
|
if (result != cacheExchangeRates()) {
|
||||||
|
System.out.println(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
divideByZero();
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
divideByZeroQuietly();
|
||||||
|
try {
|
||||||
|
processFile();
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Loggable
|
||||||
|
@Async
|
||||||
|
public static void displayFactorial(int number) {
|
||||||
|
long result = factorial(number);
|
||||||
|
System.out.println(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Loggable
|
||||||
|
@Async
|
||||||
|
public static Future<Long> getFactorial(int number) {
|
||||||
|
Future<Long> factorialFuture = CompletableFuture.supplyAsync(() -> factorial(number));
|
||||||
|
return factorialFuture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds factorial of a number
|
||||||
|
* @param number
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static long factorial(int number) {
|
||||||
|
long result = 1;
|
||||||
|
for(int i=number;i>0;i--) {
|
||||||
|
result *= i;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Loggable
|
||||||
|
@Cacheable(lifetime = 2, unit = TimeUnit.SECONDS)
|
||||||
|
public static String cacheExchangeRates() {
|
||||||
|
String result = null;
|
||||||
|
try {
|
||||||
|
URL exchangeRateUrl = new URL("https://api.exchangeratesapi.io/latest");
|
||||||
|
URLConnection con = exchangeRateUrl.openConnection();
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
|
||||||
|
result = in.readLine();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@LogExceptions
|
||||||
|
public static void divideByZero() {
|
||||||
|
int x = 1/0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RetryOnFailure(attempts = 2, types = {java.lang.NumberFormatException.class})
|
||||||
|
@Quietly
|
||||||
|
public static void divideByZeroQuietly() {
|
||||||
|
int x = 1/0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@UnitedThrow(IllegalStateException.class)
|
||||||
|
public static void processFile() throws IOException, InterruptedException {
|
||||||
|
BufferedReader reader = new BufferedReader(new FileReader("baeldung.txt"));
|
||||||
|
reader.readLine();
|
||||||
|
|
||||||
|
Thread thread = new Thread();
|
||||||
|
thread.wait(2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -6,12 +6,13 @@ import org.junit.Test;
|
||||||
|
|
||||||
public class ProductHelperUnitTest {
|
public class ProductHelperUnitTest {
|
||||||
|
|
||||||
ProductHelper productHelper = new ProductHelper();
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenInvokedGetDiscount_thenGetItFromCache() {
|
public void whenInvokedGetDiscountTwice_thenGetItFromCache() {
|
||||||
|
ProductHelper productHelper = new ProductHelper();
|
||||||
|
assertTrue(productHelper.getCacheMissCount() == 0);
|
||||||
assertTrue(productHelper.getDiscount("Sports") == 20);
|
assertTrue(productHelper.getDiscount("Sports") == 20);
|
||||||
assertTrue(productHelper.getDiscount("Electronics") == 0);
|
assertTrue(productHelper.getDiscount("Sports") == 20);
|
||||||
|
assertTrue(productHelper.getCacheMissCount() == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,12 +6,16 @@ import org.junit.Test;
|
||||||
|
|
||||||
public class ProductHelperUsingLoaderUnitTest {
|
public class ProductHelperUsingLoaderUnitTest {
|
||||||
|
|
||||||
ProductHelperUsingLoader productHelper = new ProductHelperUsingLoader();
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenInvokedGetDiscount_thenPopulateCache() {
|
public void whenInvokedGetDiscount_thenPopulateCacheUsingLoader() {
|
||||||
|
ProductHelperUsingLoader productHelper = new ProductHelperUsingLoader();
|
||||||
|
assertTrue(productHelper.getCacheMissCount() == 0);
|
||||||
|
|
||||||
assertTrue(productHelper.getDiscount("Sports") == 20);
|
assertTrue(productHelper.getDiscount("Sports") == 20);
|
||||||
|
assertTrue(productHelper.getCacheMissCount() == 1);
|
||||||
|
|
||||||
assertTrue(productHelper.getDiscount("Electronics") == 10);
|
assertTrue(productHelper.getDiscount("Electronics") == 10);
|
||||||
|
assertTrue(productHelper.getCacheMissCount() == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,9 @@ import org.junit.Test;
|
||||||
|
|
||||||
public class ProductHelperWithEventListenerUnitTest {
|
public class ProductHelperWithEventListenerUnitTest {
|
||||||
|
|
||||||
ProductHelperWithEventListener productHelper = new ProductHelperWithEventListener();
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenEntryAddedInCache_thenEventListenerCalled() {
|
public void whenEntryAddedInCache_thenEventListenerCalled() {
|
||||||
|
ProductHelperWithEventListener productHelper = new ProductHelperWithEventListener();
|
||||||
assertTrue(productHelper.getDiscount("Sports") == 20);
|
assertTrue(productHelper.getDiscount("Sports") == 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,17 @@ import org.junit.Test;
|
||||||
|
|
||||||
public class ProductHelperWithExpiryUnitTest {
|
public class ProductHelperWithExpiryUnitTest {
|
||||||
|
|
||||||
ProductHelperWithExpiry productHelper = new ProductHelperWithExpiry();
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenInvokedGetDiscountForExpiredProduct_thenNoDiscount() throws InterruptedException {
|
public void whenInvokedGetDiscountAfterExpiration_thenDiscountCalculatedAgain() throws InterruptedException {
|
||||||
|
ProductHelperWithExpiry productHelper = new ProductHelperWithExpiry();
|
||||||
|
assertTrue(productHelper.getCacheMissCount() == 0);
|
||||||
assertTrue(productHelper.getDiscount("Sports") == 20);
|
assertTrue(productHelper.getDiscount("Sports") == 20);
|
||||||
|
assertTrue(productHelper.getCacheMissCount() == 1);
|
||||||
|
|
||||||
Thread.sleep(20);
|
Thread.sleep(20);
|
||||||
assertTrue(productHelper.getDiscount("Sports") == 0);
|
|
||||||
|
assertTrue(productHelper.getDiscount("Sports") == 20);
|
||||||
|
assertTrue(productHelper.getCacheMissCount() == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
package com.baeldung.moshi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import com.squareup.moshi.FromJson;
|
||||||
|
import com.squareup.moshi.JsonAdapter;
|
||||||
|
import com.squareup.moshi.JsonQualifier;
|
||||||
|
import com.squareup.moshi.Moshi;
|
||||||
|
import com.squareup.moshi.ToJson;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class AlternativeAdapterUnitTest {
|
||||||
|
@Test
|
||||||
|
public void whenSerializing_thenAlternativeAdapterUsed() {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.add(new EpochMillisAdapter())
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
String json = jsonAdapter.toJson(new Post("Introduction to Moshi Json", "Baeldung", Instant.now()));
|
||||||
|
System.out.println(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeserializing_thenAlternativeAdapterUsed() throws IOException {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.add(new EpochMillisAdapter())
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
String json = "{\"author\":\"Baeldung\",\"posted\":1582095269204,\"title\":\"Introduction to Moshi Json\"}";
|
||||||
|
Post post = jsonAdapter.fromJson(json);
|
||||||
|
System.out.println(post);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Post {
|
||||||
|
String title;
|
||||||
|
String author;
|
||||||
|
@EpochMillis Instant posted;
|
||||||
|
|
||||||
|
public Post() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Post(String title, String author, Instant posted) {
|
||||||
|
this.title = title;
|
||||||
|
this.author = author;
|
||||||
|
this.posted = posted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthor(String author) {
|
||||||
|
this.author = author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instant getPosted() {
|
||||||
|
return posted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPosted(Instant posted) {
|
||||||
|
this.posted = posted;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this).append("title", title).append("author", author).append("posted", posted)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
|
||||||
|
@JsonQualifier
|
||||||
|
public @interface EpochMillis {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class EpochMillisAdapter {
|
||||||
|
@ToJson
|
||||||
|
public Long toJson(@EpochMillis Instant input) {
|
||||||
|
return input.toEpochMilli();
|
||||||
|
}
|
||||||
|
@FromJson
|
||||||
|
@EpochMillis
|
||||||
|
public Instant fromJson(Long input) {
|
||||||
|
return Instant.ofEpochMilli(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.baeldung.moshi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonAdapter;
|
||||||
|
import com.squareup.moshi.Moshi;
|
||||||
|
import com.squareup.moshi.Types;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ArrayUnitTest {
|
||||||
|
@Test
|
||||||
|
public void whenSerializingList_thenJsonArrayProduced() {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
Type type = Types.newParameterizedType(List.class, String.class);
|
||||||
|
JsonAdapter<List<String>> jsonAdapter = moshi.adapter(type);
|
||||||
|
|
||||||
|
String json = jsonAdapter.toJson(Arrays.asList("One", "Two", "Three"));
|
||||||
|
System.out.println(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeserializingJsonArray_thenListProduced() throws IOException {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
Type type = Types.newParameterizedType(List.class, String.class);
|
||||||
|
JsonAdapter<List<String>> jsonAdapter = moshi.adapter(type);
|
||||||
|
|
||||||
|
String json = "[\"One\",\"Two\",\"Three\"]";
|
||||||
|
List<String> result = jsonAdapter.fromJson(json);
|
||||||
|
System.out.println(result);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
package com.baeldung.moshi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
|
import com.squareup.moshi.FromJson;
|
||||||
|
import com.squareup.moshi.JsonAdapter;
|
||||||
|
import com.squareup.moshi.Moshi;
|
||||||
|
import com.squareup.moshi.ToJson;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ComplexAdapterUnitTest {
|
||||||
|
@Test
|
||||||
|
public void whenSerializing_thenCorrectJsonProduced() {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.add(new JsonDateTimeAdapter())
|
||||||
|
.build();
|
||||||
|
JsonAdapter<ZonedDateTime> jsonAdapter = moshi.adapter(ZonedDateTime.class);
|
||||||
|
|
||||||
|
String json = jsonAdapter.toJson(ZonedDateTime.now());
|
||||||
|
System.out.println(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeserializing_thenCorrectJsonConsumed() throws IOException {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.add(new JsonDateTimeAdapter())
|
||||||
|
.build();
|
||||||
|
JsonAdapter<ZonedDateTime> jsonAdapter = moshi.adapter(ZonedDateTime.class);
|
||||||
|
|
||||||
|
String json = "{\"date\":\"2020-02-17\",\"time\":\"07:53:27.064\",\"timezone\":\"Europe/London\"}";
|
||||||
|
ZonedDateTime now = jsonAdapter.fromJson(json);
|
||||||
|
System.out.println(now);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class JsonDateTimeAdapter {
|
||||||
|
@ToJson
|
||||||
|
public JsonDateTime toJson(ZonedDateTime input) {
|
||||||
|
String date = input.toLocalDate().toString();
|
||||||
|
String time = input.toLocalTime().toString();
|
||||||
|
String timezone = input.getZone().toString();
|
||||||
|
return new JsonDateTime(date, time, timezone);
|
||||||
|
}
|
||||||
|
@FromJson
|
||||||
|
public ZonedDateTime fromJson(JsonDateTime input) {
|
||||||
|
LocalDate date = LocalDate.parse(input.getDate());
|
||||||
|
LocalTime time = LocalTime.parse(input.getTime());
|
||||||
|
ZoneId timezone = ZoneId.of(input.getTimezone());
|
||||||
|
return ZonedDateTime.of(date, time, timezone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static class JsonDateTime {
|
||||||
|
private String date;
|
||||||
|
private String time;
|
||||||
|
private String timezone;
|
||||||
|
|
||||||
|
public JsonDateTime() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonDateTime(String date, String time, String timezone) {
|
||||||
|
this.date = date;
|
||||||
|
this.time = time;
|
||||||
|
this.timezone = timezone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDate() {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDate(String date) {
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTime() {
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTime(String time) {
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTimezone() {
|
||||||
|
return timezone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimezone(String timezone) {
|
||||||
|
this.timezone = timezone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
package com.baeldung.moshi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonAdapter;
|
||||||
|
import com.squareup.moshi.Moshi;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class DefaultUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeserializing_thenFieldsGetDefaultValues() throws IOException {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
String json = "{\"title\":\"My Post\"}";
|
||||||
|
Post post = jsonAdapter.fromJson(json);
|
||||||
|
System.out.println(post);
|
||||||
|
}
|
||||||
|
public static class Post {
|
||||||
|
private String title;
|
||||||
|
private String author;
|
||||||
|
private String posted;
|
||||||
|
|
||||||
|
public Post() {
|
||||||
|
posted = Instant.now().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Post(String title, String author, String posted) {
|
||||||
|
this.title = title;
|
||||||
|
this.author = author;
|
||||||
|
this.posted = posted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthor(String author) {
|
||||||
|
this.author = author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPosted() {
|
||||||
|
return posted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPosted(String posted) {
|
||||||
|
this.posted = posted;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this).append("title", title).append("author", author).append("posted", posted)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
package com.baeldung.moshi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonAdapter;
|
||||||
|
import com.squareup.moshi.Moshi;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class PrimitiveUnitTest {
|
||||||
|
@Test
|
||||||
|
public void whenSerializing_thenCorrectJsonProduced() {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
Post post = new Post("My Post", "Baeldung", "This is my post");
|
||||||
|
String json = jsonAdapter.toJson(post);
|
||||||
|
System.out.println(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeserializing_thenCorrectJsonConsumed() throws IOException {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
String json = "{\"author\":\"Baeldung\",\"text\":\"This is my post\",\"title\":\"My Post\"}";
|
||||||
|
Post post = jsonAdapter.fromJson(json);
|
||||||
|
System.out.println(post);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Post {
|
||||||
|
private String title;
|
||||||
|
private String author;
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
public Post() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Post(String title, String author, String text) {
|
||||||
|
this.title = title;
|
||||||
|
this.author = author;
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthor(String author) {
|
||||||
|
this.author = author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this).append("title", title).append("author", author).append("text", text)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
package com.baeldung.moshi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json;
|
||||||
|
import com.squareup.moshi.JsonAdapter;
|
||||||
|
import com.squareup.moshi.Moshi;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class RenameUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSerializing_thenFieldsGetRenamed() {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
Post post = new Post("My Post", "Baeldung");
|
||||||
|
String json = jsonAdapter.toJson(post);
|
||||||
|
System.out.println(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSerializing_thenRenamedFieldsGetConsumed() throws IOException {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
String json = "{\"authored_by\":\"Baeldung\",\"title\":\"My Post\"}";
|
||||||
|
Post post = jsonAdapter.fromJson(json);
|
||||||
|
System.out.println(post);
|
||||||
|
}
|
||||||
|
public static class Post {
|
||||||
|
private String title;
|
||||||
|
@Json(name = "authored_by")
|
||||||
|
private String author;
|
||||||
|
|
||||||
|
public Post() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Post(String title, String author) {
|
||||||
|
this.title = title;
|
||||||
|
this.author = author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthor(String author) {
|
||||||
|
this.author = author;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this).append("title", title).append("author", author).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,129 @@
|
||||||
|
package com.baeldung.moshi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import com.squareup.moshi.FromJson;
|
||||||
|
import com.squareup.moshi.JsonAdapter;
|
||||||
|
import com.squareup.moshi.Moshi;
|
||||||
|
import com.squareup.moshi.ToJson;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class SimpleAdapterUnitTest {
|
||||||
|
@Test
|
||||||
|
public void whenSerializing_thenAdapterUsed() {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.add(new AuthorAdapter())
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
Post post = new Post("My Post", new Author("Baeldung", "baeldung@example.com"), "This is my post");
|
||||||
|
String json = jsonAdapter.toJson(post);
|
||||||
|
System.out.println(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeserializing_thenAdapterUsed() throws IOException {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.add(new AuthorAdapter())
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
String json = "{\"author\":\"Baeldung <baeldung@example.com>\",\"text\":\"This is my post\",\"title\":\"My Post\"}";
|
||||||
|
Post post = jsonAdapter.fromJson(json);
|
||||||
|
System.out.println(post);
|
||||||
|
}
|
||||||
|
public static class AuthorAdapter {
|
||||||
|
private Pattern pattern = Pattern.compile("^(.*) <(.*)>$");
|
||||||
|
@ToJson
|
||||||
|
public String toJson(Author author) {
|
||||||
|
return author.name + " <" + author.email + ">";
|
||||||
|
}
|
||||||
|
|
||||||
|
@FromJson
|
||||||
|
public Author fromJson(String author) {
|
||||||
|
Matcher matcher = pattern.matcher(author);
|
||||||
|
return matcher.find() ? new Author(matcher.group(1), matcher.group(2)) : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Author {
|
||||||
|
private String name;
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
public Author() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Author(String name, String email) {
|
||||||
|
this.name = name;
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this).append("name", name).append("email", email).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static class Post {
|
||||||
|
private String title;
|
||||||
|
private Author author;
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
public Post() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Post(String title, Author author, String text) {
|
||||||
|
this.title = title;
|
||||||
|
this.author = author;
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Author getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthor(Author author) {
|
||||||
|
this.author = author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this).append("title", title).append("author", author).append("text", text)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
package com.baeldung.moshi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonAdapter;
|
||||||
|
import com.squareup.moshi.Moshi;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class TransientUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSerializing_thenTransientFieldIgnored() {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
Post post = new Post("My Post", "Baeldung");
|
||||||
|
String json = jsonAdapter.toJson(post);
|
||||||
|
System.out.println(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeserializing_thenTransientFieldIgnored() throws IOException {
|
||||||
|
Moshi moshi = new Moshi.Builder()
|
||||||
|
.build();
|
||||||
|
JsonAdapter<Post> jsonAdapter = moshi.adapter(Post.class);
|
||||||
|
|
||||||
|
String json = "{\"authored_by\":\"Baeldung\",\"title\":\"My Post\"}";
|
||||||
|
Post post = jsonAdapter.fromJson(json);
|
||||||
|
System.out.println(post);
|
||||||
|
}
|
||||||
|
public static class Post {
|
||||||
|
private String title;
|
||||||
|
private transient String author;
|
||||||
|
|
||||||
|
public Post() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Post(String title, String author) {
|
||||||
|
this.title = title;
|
||||||
|
this.author = author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthor(String author) {
|
||||||
|
this.author = author;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this).append("title", title).append("author", author).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,8 +4,8 @@ This module contains articles about Spring with Hibernate 3
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [Hibernate 3 with Spring](http://www.baeldung.com/hibernate3-spring)
|
- [Hibernate 3 with Spring](https://www.baeldung.com/hibernate3-spring)
|
||||||
- [HibernateException: No Hibernate Session Bound to Thread in Hibernate 3](http://www.baeldung.com/no-hibernate-session-bound-to-thread-exception)
|
- [HibernateException: No Hibernate Session Bound to Thread in Hibernate 3](https://www.baeldung.com/no-hibernate-session-bound-to-thread-exception)
|
||||||
|
|
||||||
### Quick Start
|
### Quick Start
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,7 +1,7 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Event;
|
import com.baeldung.persistence.model.Event;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
|
import com.baeldung.persistence.model.Event;
|
||||||
|
|
||||||
|
|
||||||
|
public interface IEventDao extends IOperations<Event> {
|
||||||
|
//
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
|
import com.baeldung.persistence.model.Foo;
|
||||||
|
|
||||||
|
public interface IFooDao extends IOperations<Foo> {
|
||||||
|
//
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.model;
|
package com.baeldung.persistence.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.model;
|
package com.baeldung.persistence.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
|
|
||||||
import org.baeldung.persistence.dao.IEventDao;
|
import com.baeldung.persistence.model.Event;
|
||||||
import org.baeldung.persistence.model.Event;
|
import com.baeldung.persistence.dao.IEventDao;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
|
@ -1,7 +1,7 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import org.baeldung.persistence.dao.IFooDao;
|
import com.baeldung.persistence.dao.IFooDao;
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.spring;
|
package com.baeldung.spring;
|
||||||
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ import com.google.common.base.Preconditions;
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@PropertySource({ "classpath:persistence-h2.properties" })
|
@PropertySource({ "classpath:persistence-h2.properties" })
|
||||||
@ComponentScan({ "org.baeldung.persistence.dao", "org.baeldung.persistence.service" })
|
@ComponentScan({ "com.baeldung.persistence.dao", "com.baeldung.persistence.service" })
|
||||||
public class PersistenceConfig {
|
public class PersistenceConfig {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
@ -36,7 +36,7 @@ public class PersistenceConfig {
|
||||||
public AnnotationSessionFactoryBean sessionFactory() {
|
public AnnotationSessionFactoryBean sessionFactory() {
|
||||||
final AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();
|
final AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();
|
||||||
sessionFactory.setDataSource(dataSource());
|
sessionFactory.setDataSource(dataSource());
|
||||||
sessionFactory.setPackagesToScan(new String[] { "org.baeldung.persistence.model" });
|
sessionFactory.setPackagesToScan(new String[] { "com.baeldung.persistence.model" });
|
||||||
sessionFactory.setHibernateProperties(hibernateProperties());
|
sessionFactory.setHibernateProperties(hibernateProperties());
|
||||||
|
|
||||||
return sessionFactory;
|
return sessionFactory;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.spring;
|
package com.baeldung.spring;
|
||||||
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import com.google.common.base.Preconditions;
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@PropertySource({ "classpath:persistence-h2.properties" })
|
@PropertySource({ "classpath:persistence-h2.properties" })
|
||||||
@ComponentScan({ "org.baeldung.persistence.dao", "org.baeldung.persistence.service" })
|
@ComponentScan({ "com.baeldung.persistence.dao", "com.baeldung.persistence.service" })
|
||||||
public class PersistenceConfigHibernate3 {
|
public class PersistenceConfigHibernate3 {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.spring;
|
package com.baeldung.spring;
|
||||||
|
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.ImportResource;
|
import org.springframework.context.annotation.ImportResource;
|
||||||
|
@ -6,7 +6,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
// @Configuration
|
// @Configuration
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@ComponentScan({ "org.baeldung.persistence.dao", "org.baeldung.persistence.service" })
|
@ComponentScan({ "com.baeldung.persistence.dao", "com.baeldung.persistence.service" })
|
||||||
@ImportResource({ "classpath:persistenceConfig.xml" })
|
@ImportResource({ "classpath:persistenceConfig.xml" })
|
||||||
public class PersistenceXmlConfig {
|
public class PersistenceXmlConfig {
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
package org.baeldung.persistence.dao;
|
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Event;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public interface IEventDao extends IOperations<Event> {
|
|
||||||
//
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
package org.baeldung.persistence.dao;
|
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Foo;
|
|
||||||
|
|
||||||
public interface IFooDao extends IOperations<Foo> {
|
|
||||||
//
|
|
||||||
}
|
|
|
@ -4,6 +4,6 @@
|
||||||
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
|
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
|
||||||
<hibernate-configuration>
|
<hibernate-configuration>
|
||||||
<session-factory>
|
<session-factory>
|
||||||
<mapping class="org.baeldung.persistence.model.Event" />
|
<mapping class="com.baeldung.persistence.model.Event" />
|
||||||
</session-factory>
|
</session-factory>
|
||||||
</hibernate-configuration>
|
</hibernate-configuration>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
|
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
|
||||||
|
|
||||||
<context:annotation-config />
|
<context:annotation-config />
|
||||||
<context:component-scan base-package="org.baeldung.persistence" />
|
<context:component-scan base-package="com.baeldung.persistence" />
|
||||||
<context:property-placeholder location="classpath:persistence-h2.properties"/>
|
<context:property-placeholder location="classpath:persistence-h2.properties"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
|
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
|
||||||
<property name="dataSource" ref="dataSource"/>
|
<property name="dataSource" ref="dataSource"/>
|
||||||
<property name="packagesToScan" value="org.baeldung.persistence.model"/>
|
<property name="packagesToScan" value="com.baeldung.persistence.model"/>
|
||||||
<property name="hibernateProperties">
|
<property name="hibernateProperties">
|
||||||
<props>
|
<props>
|
||||||
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
|
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
</context-param>
|
</context-param>
|
||||||
<context-param>
|
<context-param>
|
||||||
<param-name>contextConfigLocation</param-name>
|
<param-name>contextConfigLocation</param-name>
|
||||||
<param-value>org.baeldung.spring</param-value>
|
<param-value>com.baeldung.spring</param-value>
|
||||||
</context-param>
|
</context-param>
|
||||||
<listener>
|
<listener>
|
||||||
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
|
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung;
|
package com.baeldung;
|
||||||
|
|
||||||
import org.baeldung.spring.PersistenceConfig;
|
import com.baeldung.spring.PersistenceConfig;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
|
@ -1,10 +1,9 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
|
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.spring.PersistenceConfig;
|
||||||
import org.baeldung.persistence.service.FooService;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.baeldung.spring.PersistenceConfig;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@ -1,7 +1,7 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Event;
|
import com.baeldung.persistence.model.Event;
|
||||||
import org.baeldung.spring.PersistenceConfigHibernate3;
|
import com.baeldung.spring.PersistenceConfigHibernate3;
|
||||||
import org.hamcrest.core.IsInstanceOf;
|
import org.hamcrest.core.IsInstanceOf;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
|
@ -1,7 +1,7 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Event;
|
import com.baeldung.persistence.model.Event;
|
||||||
import org.baeldung.spring.PersistenceConfig;
|
import com.baeldung.spring.PersistenceConfig;
|
||||||
import org.hamcrest.core.IsInstanceOf;
|
import org.hamcrest.core.IsInstanceOf;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
|
@ -1,7 +1,7 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Event;
|
import com.baeldung.persistence.model.Event;
|
||||||
import org.baeldung.spring.PersistenceXmlConfig;
|
import com.baeldung.spring.PersistenceXmlConfig;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Event;
|
import com.baeldung.persistence.model.Event;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
|
@ -8,7 +8,6 @@ import org.junit.Test;
|
||||||
import org.junit.rules.ExpectedException;
|
import org.junit.rules.ExpectedException;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.orm.hibernate3.HibernateSystemException;
|
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
|
|
@ -4,11 +4,11 @@ This module contains articles about Hibernate 5 with Spring.
|
||||||
|
|
||||||
### Relevant articles
|
### Relevant articles
|
||||||
|
|
||||||
- [Hibernate Many to Many Annotation Tutorial](http://www.baeldung.com/hibernate-many-to-many)
|
- [Hibernate Many to Many Annotation Tutorial](https://www.baeldung.com/hibernate-many-to-many)
|
||||||
- [Programmatic Transactions in the Spring TestContext Framework](http://www.baeldung.com/spring-test-programmatic-transactions)
|
- [Programmatic Transactions in the Spring TestContext Framework](https://www.baeldung.com/spring-test-programmatic-transactions)
|
||||||
- [JPA Criteria Queries](http://www.baeldung.com/hibernate-criteria-queries)
|
- [JPA Criteria Queries](https://www.baeldung.com/hibernate-criteria-queries)
|
||||||
- [Introduction to Hibernate Search](http://www.baeldung.com/hibernate-search)
|
- [Introduction to Hibernate Search](https://www.baeldung.com/hibernate-search)
|
||||||
- [@DynamicUpdate with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-dynamicupdate)
|
- [@DynamicUpdate with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-dynamicupdate)
|
||||||
- [Hibernate Second-Level Cache](http://www.baeldung.com/hibernate-second-level-cache)
|
- [Hibernate Second-Level Cache](https://www.baeldung.com/hibernate-second-level-cache)
|
||||||
- [Deleting Objects with Hibernate](http://www.baeldung.com/delete-with-hibernate)
|
- [Deleting Objects with Hibernate](https://www.baeldung.com/delete-with-hibernate)
|
||||||
- [Spring, Hibernate and a JNDI Datasource](http://www.baeldung.com/spring-persistence-jpa-jndi-datasource)
|
- [Spring, Hibernate and a JNDI Datasource](https://www.baeldung.com/spring-persistence-jpa-jndi-datasource)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung;
|
package com.baeldung;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
|
@ -3,13 +3,13 @@
|
||||||
This module contains articles about Spring with Hibernate 4
|
This module contains articles about Spring with Hibernate 4
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
- [Guide to Hibernate 4 with Spring](http://www.baeldung.com/hibernate-4-spring)
|
- [Guide to Hibernate 4 with Spring](https://www.baeldung.com/hibernate-4-spring)
|
||||||
- [Hibernate Pagination](http://www.baeldung.com/hibernate-pagination)
|
- [Hibernate Pagination](https://www.baeldung.com/hibernate-pagination)
|
||||||
- [Sorting with Hibernate](http://www.baeldung.com/hibernate-sort)
|
- [Sorting with Hibernate](https://www.baeldung.com/hibernate-sort)
|
||||||
- [Stored Procedures with Hibernate](http://www.baeldung.com/stored-procedures-with-hibernate-tutorial)
|
- [Stored Procedures with Hibernate](https://www.baeldung.com/stored-procedures-with-hibernate-tutorial)
|
||||||
- [Hibernate: save, persist, update, merge, saveOrUpdate](http://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate)
|
- [Hibernate: save, persist, update, merge, saveOrUpdate](https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate)
|
||||||
- [Eager/Lazy Loading In Hibernate](http://www.baeldung.com/hibernate-lazy-eager-loading)
|
- [Eager/Lazy Loading In Hibernate](https://www.baeldung.com/hibernate-lazy-eager-loading)
|
||||||
- [The DAO with Spring and Hibernate](http://www.baeldung.com/persistence-layer-with-spring-and-hibernate)
|
- [The DAO with Spring and Hibernate](https://www.baeldung.com/persistence-layer-with-spring-and-hibernate)
|
||||||
- [Auditing with JPA, Hibernate, and Spring Data JPA](https://www.baeldung.com/database-auditing-jpa)
|
- [Auditing with JPA, Hibernate, and Spring Data JPA](https://www.baeldung.com/database-auditing-jpa)
|
||||||
|
|
||||||
### Quick Start
|
### Quick Start
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung;
|
package com.baeldung;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
|
@ -4,13 +4,13 @@
|
||||||
|
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
- [The DAO with JPA and Spring](http://www.baeldung.com/spring-dao-jpa)
|
- [The DAO with JPA and Spring](https://www.baeldung.com/spring-dao-jpa)
|
||||||
- [JPA Pagination](http://www.baeldung.com/jpa-pagination)
|
- [JPA Pagination](https://www.baeldung.com/jpa-pagination)
|
||||||
- [Sorting with JPA](http://www.baeldung.com/jpa-sort)
|
- [Sorting with JPA](https://www.baeldung.com/jpa-sort)
|
||||||
- [Self-Contained Testing Using an In-Memory Database](http://www.baeldung.com/spring-jpa-test-in-memory-database)
|
- [Self-Contained Testing Using an In-Memory Database](https://www.baeldung.com/spring-jpa-test-in-memory-database)
|
||||||
- [A Guide to Spring AbstractRoutingDatasource](http://www.baeldung.com/spring-abstract-routing-data-source)
|
- [A Guide to Spring AbstractRoutingDatasource](https://www.baeldung.com/spring-abstract-routing-data-source)
|
||||||
- [Obtaining Auto-generated Keys in Spring JDBC](http://www.baeldung.com/spring-jdbc-autogenerated-keys)
|
- [Obtaining Auto-generated Keys in Spring JDBC](https://www.baeldung.com/spring-jdbc-autogenerated-keys)
|
||||||
- [Transactions with Spring 4 and JPA](http://www.baeldung.com/transaction-configuration-with-jpa-and-spring)
|
- [Transactions with Spring 4 and JPA](https://www.baeldung.com/transaction-configuration-with-jpa-and-spring)
|
||||||
- [Use Criteria Queries in a Spring Data Application](https://www.baeldung.com/spring-data-criteria-queries)
|
- [Use Criteria Queries in a Spring Data Application](https://www.baeldung.com/spring-data-criteria-queries)
|
||||||
- [Many-To-Many Relationship in JPA](https://www.baeldung.com/jpa-many-to-many)
|
- [Many-To-Many Relationship in JPA](https://www.baeldung.com/jpa-many-to-many)
|
||||||
- [Spring Persistence (Hibernate and JPA) with a JNDI datasource](https://www.baeldung.com/spring-persistence-hibernate-and-jpa-with-a-jndi-datasource/)
|
- [Spring Persistence (Hibernate and JPA) with a JNDI datasource](https://www.baeldung.com/spring-persistence-hibernate-and-jpa-with-a-jndi-datasource/)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.annotations;
|
package com.baeldung.annotations;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.annotations;
|
package com.baeldung.annotations;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import javax.persistence.NamedStoredProcedureQuery;
|
||||||
import javax.persistence.ParameterMode;
|
import javax.persistence.ParameterMode;
|
||||||
import javax.persistence.StoredProcedureParameter;
|
import javax.persistence.StoredProcedureParameter;
|
||||||
|
|
||||||
import org.baeldung.persistence.multiple.model.user.User;
|
import com.baeldung.persistence.multiple.model.user.User;
|
||||||
import org.springframework.data.annotation.CreatedBy;
|
import org.springframework.data.annotation.CreatedBy;
|
||||||
import org.springframework.data.annotation.CreatedDate;
|
import org.springframework.data.annotation.CreatedDate;
|
||||||
import org.springframework.data.annotation.Id;
|
import org.springframework.data.annotation.Id;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.annotations;
|
package com.baeldung.annotations;
|
||||||
|
|
||||||
import javax.persistence.LockModeType;
|
import javax.persistence.LockModeType;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.config;
|
package com.baeldung.config;
|
||||||
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ import com.google.common.base.Preconditions;
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@PropertySource({ "classpath:persistence-h2.properties" })
|
@PropertySource({ "classpath:persistence-h2.properties" })
|
||||||
@ComponentScan({ "org.baeldung.persistence" })
|
@ComponentScan({ "com.baeldung.persistence" })
|
||||||
@EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao")
|
@EnableJpaRepositories(basePackages = "com.baeldung.persistence.dao")
|
||||||
public class PersistenceJPAConfig {
|
public class PersistenceJPAConfig {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
@ -42,7 +42,7 @@ public class PersistenceJPAConfig {
|
||||||
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
|
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
|
||||||
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
|
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
|
||||||
em.setDataSource(dataSource());
|
em.setDataSource(dataSource());
|
||||||
em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" });
|
em.setPackagesToScan(new String[] { "com.baeldung.persistence.model" });
|
||||||
|
|
||||||
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
|
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
|
||||||
em.setJpaVendorAdapter(vendorAdapter);
|
em.setJpaVendorAdapter(vendorAdapter);
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.config;
|
package com.baeldung.config;
|
||||||
|
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.ImportResource;
|
import org.springframework.context.annotation.ImportResource;
|
||||||
|
@ -6,7 +6,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
// @Configuration
|
// @Configuration
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@ComponentScan({ "org.baeldung.persistence" })
|
@ComponentScan({ "com.baeldung.persistence" })
|
||||||
@ImportResource({ "classpath:jpaConfig.xml" })
|
@ImportResource({ "classpath:jpaConfig.xml" })
|
||||||
public class PersistenceJPAConfigXml {
|
public class PersistenceJPAConfigXml {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.config;
|
package com.baeldung.config;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
@ -10,7 +10,7 @@ import org.springframework.web.servlet.view.JstlView;
|
||||||
|
|
||||||
@EnableWebMvc
|
@EnableWebMvc
|
||||||
@Configuration
|
@Configuration
|
||||||
@ComponentScan({ "org.baeldung.web" })
|
@ComponentScan({ "com.baeldung.web" })
|
||||||
public class SpringWebConfig extends WebMvcConfigurerAdapter {
|
public class SpringWebConfig extends WebMvcConfigurerAdapter {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.config;
|
package com.baeldung.config;
|
||||||
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableJpaRepositories(basePackages = "org.baeldung.inmemory.persistence.dao")
|
@EnableJpaRepositories(basePackages = "com.baeldung.inmemory.persistence.dao")
|
||||||
@PropertySource("persistence-student.properties")
|
@PropertySource("persistence-student.properties")
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
public class StudentJpaConfig {
|
public class StudentJpaConfig {
|
||||||
|
@ -41,7 +41,7 @@ public class StudentJpaConfig {
|
||||||
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
|
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
|
||||||
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
|
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
|
||||||
em.setDataSource(dataSource());
|
em.setDataSource(dataSource());
|
||||||
em.setPackagesToScan(new String[] { "org.baeldung.inmemory.persistence.model" });
|
em.setPackagesToScan(new String[] { "com.baeldung.inmemory.persistence.model" });
|
||||||
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
|
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
|
||||||
em.setJpaProperties(additionalProperties());
|
em.setJpaProperties(additionalProperties());
|
||||||
return em;
|
return em;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.config;
|
package com.baeldung.config;
|
||||||
|
|
||||||
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
|
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.dsrouting;
|
package com.baeldung.dsrouting;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.dsrouting;
|
package com.baeldung.dsrouting;
|
||||||
|
|
||||||
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
|
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.dsrouting;
|
package com.baeldung.dsrouting;
|
||||||
|
|
||||||
public enum ClientDatabase {
|
public enum ClientDatabase {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.dsrouting;
|
package com.baeldung.dsrouting;
|
||||||
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.dsrouting;
|
package com.baeldung.dsrouting;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service layer code for datasource routing example. Here, the service methods are responsible
|
* Service layer code for datasource routing example. Here, the service methods are responsible
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.inmemory.persistence.dao;
|
package com.baeldung.inmemory.persistence.dao;
|
||||||
|
|
||||||
import org.baeldung.inmemory.persistence.model.ManyStudent;
|
import com.baeldung.inmemory.persistence.model.ManyStudent;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.inmemory.persistence.dao;
|
package com.baeldung.inmemory.persistence.dao;
|
||||||
|
|
||||||
import org.baeldung.inmemory.persistence.model.ManyTag;
|
import com.baeldung.inmemory.persistence.model.ManyTag;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
public interface ManyTagRepository extends JpaRepository<ManyTag, Long> {
|
public interface ManyTagRepository extends JpaRepository<ManyTag, Long> {
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.inmemory.persistence.dao;
|
package com.baeldung.inmemory.persistence.dao;
|
||||||
|
|
||||||
import org.baeldung.inmemory.persistence.model.Student;
|
import com.baeldung.inmemory.persistence.model.Student;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.inmemory.persistence.model;
|
package com.baeldung.inmemory.persistence.model;
|
||||||
|
|
||||||
import javax.persistence.Embeddable;
|
import javax.persistence.Embeddable;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.inmemory.persistence.model;
|
package com.baeldung.inmemory.persistence.model;
|
||||||
|
|
||||||
import javax.persistence.Embeddable;
|
import javax.persistence.Embeddable;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.inmemory.persistence.model;
|
package com.baeldung.inmemory.persistence.model;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.inmemory.persistence.model;
|
package com.baeldung.inmemory.persistence.model;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.inmemory.persistence.model;
|
package com.baeldung.inmemory.persistence.model;
|
||||||
|
|
||||||
import javax.persistence.Embeddable;
|
import javax.persistence.Embeddable;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.inmemory.persistence.model;
|
package com.baeldung.inmemory.persistence.model;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Book;
|
import com.baeldung.persistence.model.Book;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Book;
|
import com.baeldung.persistence.model.Book;
|
||||||
|
|
||||||
public interface BookRepositoryCustom {
|
public interface BookRepositoryCustom {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -10,7 +10,7 @@ import javax.persistence.criteria.CriteriaQuery;
|
||||||
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Predicate;
|
||||||
import javax.persistence.criteria.Root;
|
import javax.persistence.criteria.Root;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Book;
|
import com.baeldung.persistence.model.Book;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
|
@ -1,12 +1,12 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import static org.baeldung.persistence.dao.BookSpecifications.hasAuthor;
|
import static com.baeldung.persistence.dao.BookSpecifications.hasAuthor;
|
||||||
import static org.baeldung.persistence.dao.BookSpecifications.titleContains;
|
import static com.baeldung.persistence.dao.BookSpecifications.titleContains;
|
||||||
import static org.springframework.data.jpa.domain.Specifications.where;
|
import static org.springframework.data.jpa.domain.Specifications.where;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Book;
|
import com.baeldung.persistence.model.Book;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@Service
|
@Service
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Book;
|
import com.baeldung.persistence.model.Book;
|
||||||
import org.springframework.data.jpa.domain.Specification;
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
|
|
||||||
public class BookSpecifications {
|
public class BookSpecifications {
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
|
@ -1,8 +1,8 @@
|
||||||
package org.baeldung.persistence.dao;
|
package com.baeldung.persistence.dao;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
|
|
||||||
public interface IFooDao {
|
public interface IFooDao {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.model;
|
package com.baeldung.persistence.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.model;
|
package com.baeldung.persistence.model;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.model;
|
package com.baeldung.persistence.model;
|
||||||
|
|
||||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.multiple.model.user;
|
package com.baeldung.persistence.multiple.model.user;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.multiple.model.user;
|
package com.baeldung.persistence.multiple.model.user;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,9 +1,9 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.baeldung.persistence.dao.IFooDao;
|
import com.baeldung.persistence.dao.IFooDao;
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.sqlfiles;
|
package com.baeldung.sqlfiles;
|
||||||
|
|
||||||
import static javax.persistence.GenerationType.IDENTITY;
|
import static javax.persistence.GenerationType.IDENTITY;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package org.baeldung.web;
|
package com.baeldung.web;
|
||||||
|
|
||||||
import org.baeldung.persistence.service.FooService;
|
import com.baeldung.persistence.service.FooService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
|
<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
|
||||||
<property name="dataSource" ref="dataSource"/>
|
<property name="dataSource" ref="dataSource"/>
|
||||||
<property name="packagesToScan" value="org.baeldung.persistence.model"/>
|
<property name="packagesToScan" value="com.baeldung.persistence.model"/>
|
||||||
<property name="jpaVendorAdapter">
|
<property name="jpaVendorAdapter">
|
||||||
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
|
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
|
||||||
<!-- <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> <property name="generateDdl" value="${jpa.generateDdl}" /> <property name="databasePlatform"
|
<!-- <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> <property name="generateDdl" value="${jpa.generateDdl}" /> <property name="databasePlatform"
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
|
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
|
||||||
<persistence-unit name="punit">
|
<persistence-unit name="punit">
|
||||||
<class>org.baeldung.persistence.model.Foo</class>
|
<class>com.baeldung.persistence.model.Foo</class>
|
||||||
<class>org.baeldung.persistence.model.Bar</class>
|
<class>com.baeldung.persistence.model.Bar</class>
|
||||||
<properties>
|
<properties>
|
||||||
<property name="javax.persistence.jdbc.user" value="root"/>
|
<property name="javax.persistence.jdbc.user" value="root"/>
|
||||||
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
|
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.baeldung;
|
package com.baeldung;
|
||||||
|
|
||||||
import org.baeldung.config.PersistenceJPAConfig;
|
import com.baeldung.config.PersistenceJPAConfig;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.test.annotation.DirtiesContext;
|
import org.springframework.test.annotation.DirtiesContext;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.dsrouting;
|
package com.baeldung.dsrouting;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.dsrouting;
|
package com.baeldung.dsrouting;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
|
@ -1,14 +1,14 @@
|
||||||
package org.baeldung.persistence.repository;
|
package com.baeldung.persistence.repository;
|
||||||
|
|
||||||
import org.baeldung.config.StudentJpaConfig;
|
import com.baeldung.config.StudentJpaConfig;
|
||||||
import org.baeldung.inmemory.persistence.dao.ManyStudentRepository;
|
import com.baeldung.inmemory.persistence.dao.ManyStudentRepository;
|
||||||
import org.baeldung.inmemory.persistence.dao.ManyTagRepository;
|
import com.baeldung.inmemory.persistence.dao.ManyTagRepository;
|
||||||
import org.baeldung.inmemory.persistence.dao.StudentRepository;
|
import com.baeldung.inmemory.persistence.dao.StudentRepository;
|
||||||
import org.baeldung.inmemory.persistence.model.KVTag;
|
import com.baeldung.inmemory.persistence.model.ManyStudent;
|
||||||
import org.baeldung.inmemory.persistence.model.ManyStudent;
|
import com.baeldung.inmemory.persistence.model.ManyTag;
|
||||||
import org.baeldung.inmemory.persistence.model.ManyTag;
|
import com.baeldung.inmemory.persistence.model.SkillTag;
|
||||||
import org.baeldung.inmemory.persistence.model.SkillTag;
|
import com.baeldung.inmemory.persistence.model.Student;
|
||||||
import org.baeldung.inmemory.persistence.model.Student;
|
import com.baeldung.inmemory.persistence.model.KVTag;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.test.annotation.DirtiesContext;
|
import org.springframework.test.annotation.DirtiesContext;
|
|
@ -1,8 +1,8 @@
|
||||||
package org.baeldung.persistence.repository;
|
package com.baeldung.persistence.repository;
|
||||||
|
|
||||||
import org.baeldung.config.StudentJpaConfig;
|
import com.baeldung.config.StudentJpaConfig;
|
||||||
import org.baeldung.inmemory.persistence.dao.StudentRepository;
|
import com.baeldung.inmemory.persistence.dao.StudentRepository;
|
||||||
import org.baeldung.inmemory.persistence.model.Student;
|
import com.baeldung.inmemory.persistence.model.Student;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.test.annotation.DirtiesContext;
|
import org.springframework.test.annotation.DirtiesContext;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
|
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
|
||||||
import static org.hamcrest.Matchers.hasSize;
|
import static org.hamcrest.Matchers.hasSize;
|
||||||
|
@ -15,8 +15,8 @@ import javax.persistence.criteria.CriteriaBuilder;
|
||||||
import javax.persistence.criteria.CriteriaQuery;
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
import javax.persistence.criteria.Root;
|
import javax.persistence.criteria.Root;
|
||||||
|
|
||||||
import org.baeldung.config.PersistenceJPAConfig;
|
import com.baeldung.config.PersistenceJPAConfig;
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
|
@ -1,9 +1,9 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
|
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
|
||||||
|
|
||||||
import org.baeldung.config.PersistenceJPAConfig;
|
import com.baeldung.config.PersistenceJPAConfig;
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -10,9 +10,9 @@ import javax.persistence.criteria.CriteriaBuilder;
|
||||||
import javax.persistence.criteria.CriteriaQuery;
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
import javax.persistence.criteria.Root;
|
import javax.persistence.criteria.Root;
|
||||||
|
|
||||||
import org.baeldung.config.PersistenceJPAConfig;
|
import com.baeldung.config.PersistenceJPAConfig;
|
||||||
import org.baeldung.persistence.model.Bar;
|
import com.baeldung.persistence.model.Bar;
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.test.annotation.DirtiesContext;
|
import org.springframework.test.annotation.DirtiesContext;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
|
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
|
@ -9,8 +9,8 @@ import javax.persistence.EntityManager;
|
||||||
import javax.persistence.PersistenceContext;
|
import javax.persistence.PersistenceContext;
|
||||||
import javax.persistence.Query;
|
import javax.persistence.Query;
|
||||||
|
|
||||||
import org.baeldung.config.PersistenceJPAConfig;
|
import com.baeldung.config.PersistenceJPAConfig;
|
||||||
import org.baeldung.persistence.model.Foo;
|
import com.baeldung.persistence.model.Foo;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.baeldung.persistence.service;
|
package com.baeldung.persistence.service;
|
||||||
|
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.Suite;
|
import org.junit.runners.Suite;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue