Skip to content

Commit 26e8278

Browse files
Add files via upload
1 parent 8f537a9 commit 26e8278

File tree

9 files changed

+326
-0
lines changed

9 files changed

+326
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.jpa</groupId>
7+
<artifactId>jpa</artifactId>
8+
<version>1.0</version>
9+
<packaging>jar</packaging>
10+
11+
<name>jpa</name>
12+
<description>JPA project for Spring Boot</description>
13+
14+
<parent>
15+
<groupId>org.springframework.boot</groupId>
16+
<artifactId>spring-boot-starter-parent</artifactId>
17+
<version>2.0.5.RELEASE</version>
18+
<relativePath/> <!-- lookup parent from repository -->
19+
</parent>
20+
21+
<properties>
22+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24+
<java.version>1.8</java.version>
25+
</properties>
26+
27+
<dependencies>
28+
<dependency>
29+
<groupId>org.springframework.boot</groupId>
30+
<artifactId>spring-boot-starter-data-jpa</artifactId>
31+
</dependency>
32+
<dependency>
33+
<groupId>org.springframework.boot</groupId>
34+
<artifactId>spring-boot-starter-jdbc</artifactId>
35+
</dependency>
36+
<dependency>
37+
<groupId>org.springframework.boot</groupId>
38+
<artifactId>spring-boot-starter-web</artifactId>
39+
</dependency>
40+
<dependency>
41+
<groupId>mysql</groupId>
42+
<artifactId>mysql-connector-java</artifactId>
43+
<scope>runtime</scope>
44+
</dependency>
45+
<dependency>
46+
<groupId>org.springframework.boot</groupId>
47+
<artifactId>spring-boot-starter-test</artifactId>
48+
<scope>test</scope>
49+
</dependency>
50+
</dependencies>
51+
52+
<build>
53+
<plugins>
54+
<plugin>
55+
<groupId>org.springframework.boot</groupId>
56+
<artifactId>spring-boot-maven-plugin</artifactId>
57+
</plugin>
58+
</plugins>
59+
</build>
60+
61+
62+
</project>
12.1 KB
Loading
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.jpa;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.boot.ApplicationRunner;
5+
import org.springframework.boot.SpringApplication;
6+
import org.springframework.boot.autoconfigure.SpringBootApplication;
7+
import org.springframework.context.annotation.Bean;
8+
9+
@SpringBootApplication
10+
public class OneToManyBidirectionalApplication {
11+
12+
@Autowired
13+
private TennisArenaService tennisArenaService;
14+
15+
public static void main(String[] args) {
16+
SpringApplication.run(OneToManyBidirectionalApplication.class, args);
17+
}
18+
19+
@Bean
20+
public ApplicationRunner init() {
21+
return args -> {
22+
tennisArenaService.registerTournamentAndTennisPlayers();
23+
tennisArenaService.displayAllTennisPlayers();
24+
};
25+
}
26+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.jpa;
2+
3+
import java.util.List;
4+
import java.util.logging.Logger;
5+
import org.springframework.stereotype.Service;
6+
import org.springframework.transaction.annotation.Transactional;
7+
8+
@Service
9+
public class TennisArenaService {
10+
11+
private static final Logger logger
12+
= Logger.getLogger(TennisArenaService.class.getName());
13+
14+
private final TournamentRepository tournamentRepository;
15+
private final TennisPlayerRepository tennisPlayerRepository;
16+
17+
public TennisArenaService(TournamentRepository tournamentRepository,
18+
TennisPlayerRepository tennisPlayerRepository) {
19+
20+
this.tournamentRepository = tournamentRepository;
21+
this.tennisPlayerRepository = tennisPlayerRepository;
22+
}
23+
24+
@Transactional
25+
public void registerTournamentAndTennisPlayers() {
26+
27+
Tournament rolandGarros = new Tournament()
28+
.name("Roland Garros")
29+
.addTennisPlayer(new TennisPlayer().name("Roger Federer"))
30+
.addTennisPlayer(new TennisPlayer().name("Rafael Nadal"))
31+
.addTennisPlayer(new TennisPlayer().name("David Ferer"));
32+
33+
tournamentRepository.save(rolandGarros);
34+
}
35+
36+
public void displayAllTournaments() {
37+
List<Tournament> tournaments = tournamentRepository.findAll();
38+
39+
tournaments.forEach((t) -> logger.info(() -> "Tournament name: " + t.getName()));
40+
}
41+
42+
@Transactional(readOnly=true)
43+
public void displayAllTennisPlayers() {
44+
List<TennisPlayer> players = tennisPlayerRepository.findAll();
45+
46+
players.forEach((p) -> logger.info(() -> "Player name: " + p.getName()
47+
+ " Tournament:" + p.getTournament().getName()));
48+
}
49+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.jpa;
2+
3+
import java.io.Serializable;
4+
import javax.persistence.Entity;
5+
import javax.persistence.FetchType;
6+
import javax.persistence.GeneratedValue;
7+
import javax.persistence.GenerationType;
8+
import javax.persistence.Id;
9+
import javax.persistence.JoinColumn;
10+
import javax.persistence.ManyToOne;
11+
12+
@Entity
13+
public class TennisPlayer implements Serializable {
14+
15+
private static final long serialVersionUID = 1L;
16+
17+
@Id
18+
@GeneratedValue(strategy = GenerationType.IDENTITY)
19+
private Long id;
20+
21+
private String name;
22+
23+
@ManyToOne(fetch = FetchType.LAZY)
24+
@JoinColumn(name = "tournament_id")
25+
private Tournament tournament;
26+
27+
public Long getId() {
28+
return id;
29+
}
30+
31+
public TennisPlayer id(Long id) {
32+
this.id = id;
33+
return this;
34+
}
35+
36+
public void setId(Long id) {
37+
this.id = id;
38+
}
39+
40+
public String getName() {
41+
return name;
42+
}
43+
44+
public TennisPlayer name(String name) {
45+
this.name = name;
46+
return this;
47+
}
48+
49+
public void setName(String name) {
50+
this.name = name;
51+
}
52+
53+
public Tournament getTournament() {
54+
return tournament;
55+
}
56+
57+
public TennisPlayer tournament(Tournament tournament) {
58+
this.tournament = tournament;
59+
return this;
60+
}
61+
62+
public void setTournament(Tournament tournament) {
63+
this.tournament = tournament;
64+
}
65+
66+
@Override
67+
public boolean equals(Object obj) {
68+
if (this == obj) {
69+
return true;
70+
}
71+
if (!(obj instanceof TennisPlayer)) {
72+
return false;
73+
}
74+
return id != null && id.equals(((TennisPlayer) obj).id);
75+
}
76+
77+
@Override
78+
public int hashCode() {
79+
return 2018;
80+
}
81+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.jpa;
2+
3+
import java.util.Optional;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
import org.springframework.transaction.annotation.Transactional;
7+
8+
@Repository
9+
public interface TennisPlayerRepository extends JpaRepository<TennisPlayer, Long> {
10+
11+
@Transactional(readOnly=true)
12+
Optional<TennisPlayer> findByName(String name);
13+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.jpa;
2+
3+
import java.io.Serializable;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
import javax.persistence.CascadeType;
7+
import javax.persistence.Entity;
8+
import javax.persistence.GeneratedValue;
9+
import javax.persistence.GenerationType;
10+
import javax.persistence.Id;
11+
import javax.persistence.OneToMany;
12+
13+
@Entity
14+
public class Tournament implements Serializable {
15+
16+
private static final long serialVersionUID = 1L;
17+
18+
@Id
19+
@GeneratedValue(strategy = GenerationType.IDENTITY)
20+
private Long id;
21+
22+
private String name;
23+
24+
@OneToMany(cascade = CascadeType.ALL,
25+
mappedBy = "tournament", orphanRemoval = true)
26+
private List<TennisPlayer> tennisPlayers = new ArrayList<>();
27+
28+
public Tournament addTennisPlayer(TennisPlayer tennisPlayer) {
29+
this.tennisPlayers.add(tennisPlayer.tournament(this));
30+
return this;
31+
}
32+
33+
public Tournament removeTennisPlayer(TennisPlayer tennisPlayer) {
34+
this.tennisPlayers.remove(tennisPlayer.tournament(null));
35+
return this;
36+
}
37+
38+
public Long getId() {
39+
return id;
40+
}
41+
42+
public Tournament id(Long id) {
43+
this.id = id;
44+
return this;
45+
}
46+
47+
public void setId(Long id) {
48+
this.id = id;
49+
}
50+
51+
public String getName() {
52+
return name;
53+
}
54+
55+
public Tournament name(String name) {
56+
this.name = name;
57+
return this;
58+
}
59+
60+
public void setName(String name) {
61+
this.name = name;
62+
}
63+
64+
public List<TennisPlayer> getTennisPlayers() {
65+
return tennisPlayers;
66+
}
67+
68+
public Tournament tennisPlayers(List<TennisPlayer> tennisPlayers) {
69+
this.tennisPlayers = tennisPlayers;
70+
return this;
71+
}
72+
73+
public void setTennisPlayers(List<TennisPlayer> tennisPlayers) {
74+
this.tennisPlayers = tennisPlayers;
75+
}
76+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.jpa;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.springframework.stereotype.Repository;
5+
6+
@Repository
7+
public interface TournamentRepository extends JpaRepository<Tournament, Long> {
8+
9+
Tournament findByName(String name);
10+
}
11+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
spring.datasource.url=jdbc:mysql://localhost:3306/db_tennis?createDatabaseIfNotExist=true
2+
spring.datasource.username=root
3+
spring.datasource.password=root
4+
5+
spring.jpa.hibernate.ddl-auto=create
6+
spring.jpa.show-sql=true
7+
8+
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

0 commit comments

Comments
 (0)