Skip to content
This repository was archived by the owner on Jan 13, 2023. It is now read-only.

Commit c4bebf9

Browse files
committed
Initial commit
0 parents  commit c4bebf9

File tree

11 files changed

+380
-0
lines changed

11 files changed

+380
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.idea
2+
**/*.iml
3+
**/target

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# <img src="https://raw.githubusercontent.com/bobocode-projects/resources/master/image/logo_transparent_background.png" height=50/>Spring Data JPA exercises
2+
The list of exercises dedicated to training your *Spring Data JPA* skills
3+
4+
### No pain, No gain :heavy_exclamation_mark:
5+
6+
> Skill is only developed by hours and hours and hours of beating on your craft
7+
8+
Working on real problems, you're focused on finding a solution. Learning new things, you're trying to understand how it works.
9+
It is important to have a different type of activities, which purpose is improving your skill
10+
11+
***An exercise** is a predefined task that you continuously implement to improve a certain skill* :muscle:
12+
##

pom.xml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.bobocode</groupId>
8+
<artifactId>spring-data-jpa-exercises</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
<modules>
11+
<module>spring-data-jpa-exercises-model</module>
12+
<module>spring-data-jpa-exercises-util</module>
13+
</modules>
14+
15+
<packaging>pom</packaging>
16+
17+
<properties>
18+
<maven.compiler.source>1.10</maven.compiler.source>
19+
<maven.compiler.target>1.10</maven.compiler.target>
20+
</properties>
21+
22+
<dependencies>
23+
<dependency>
24+
<groupId>org.springframework.data</groupId>
25+
<artifactId>spring-data-jpa</artifactId>
26+
<version>2.1.0.RELEASE</version>
27+
</dependency>
28+
<dependency>
29+
<groupId>com.h2database</groupId>
30+
<artifactId>h2</artifactId>
31+
<version>1.4.197</version>
32+
</dependency>
33+
<dependency>
34+
<groupId>org.slf4j</groupId>
35+
<artifactId>slf4j-simple</artifactId>
36+
<version>1.7.24</version>
37+
</dependency>
38+
<dependency>
39+
<groupId>org.hibernate.javax.persistence</groupId>
40+
<artifactId>hibernate-jpa-2.1-api</artifactId>
41+
<version>1.0.2.Final</version>
42+
</dependency>
43+
<dependency>
44+
<groupId>org.hibernate</groupId>
45+
<artifactId>hibernate-core</artifactId>
46+
<version>5.3.2.Final</version>
47+
</dependency>
48+
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
49+
<dependency>
50+
<groupId>org.projectlombok</groupId>
51+
<artifactId>lombok</artifactId>
52+
<version>1.18.2</version>
53+
</dependency>
54+
55+
56+
<!--Since JAXB APIs is no longer in default classpath in JDK 1.9 -->
57+
<dependency>
58+
<groupId>javax.xml.bind</groupId>
59+
<artifactId>jaxb-api</artifactId>
60+
<version>2.2.11</version>
61+
</dependency>
62+
</dependencies>
63+
64+
</project>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>spring-data-jpa-exercises</artifactId>
7+
<groupId>com.bobocode</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>spring-data-jpa-exercises-model</artifactId>
13+
14+
15+
</project>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.bobocode.model;
2+
3+
4+
import lombok.*;
5+
6+
import javax.persistence.*;
7+
import java.time.LocalDateTime;
8+
9+
@NoArgsConstructor
10+
@Getter
11+
@Setter
12+
@EqualsAndHashCode(of = "id")
13+
@ToString(exclude = "user")
14+
@Entity
15+
@Table(name = "address")
16+
public class Address {
17+
@Id
18+
@GeneratedValue
19+
private Long id;
20+
21+
@Column(name = "city")
22+
private String city;
23+
24+
@Column(name = "street")
25+
private String street;
26+
27+
@Column(name = "street_number")
28+
private String streetNumber;
29+
30+
@Column(name = "apartment_number")
31+
private String apartmentNumber;
32+
33+
@Column(name = "zip_code")
34+
private String zipCode;
35+
36+
@Column(name = "creation_date")
37+
private LocalDateTime creationDate;
38+
39+
@OneToOne
40+
@JoinColumn(name = "user_id")
41+
private User user;
42+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.bobocode.model;
2+
3+
public enum Gender {
4+
MALE,
5+
FEMALE
6+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.bobocode.model;
2+
3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
import lombok.Setter;
6+
import lombok.ToString;
7+
8+
import javax.persistence.*;
9+
import java.time.LocalDateTime;
10+
import java.util.Objects;
11+
12+
@NoArgsConstructor
13+
@Getter
14+
@Setter
15+
@ToString(exclude = "user")
16+
@Entity
17+
@Table(name = "role")
18+
public class Role {
19+
@Id
20+
@GeneratedValue
21+
private Long id;
22+
23+
@Enumerated(EnumType.STRING)
24+
@Column(name = "role_type")
25+
private RoleType roleType;
26+
27+
@Column(name = "creation_date")
28+
private LocalDateTime creationDate = LocalDateTime.now();
29+
30+
@ManyToOne
31+
@JoinColumn(name = "user_id")
32+
private User user;
33+
34+
public static Role valueOf(RoleType roleType) {
35+
return new Role(roleType);
36+
}
37+
38+
private Role(RoleType roleType) {
39+
this.roleType = roleType;
40+
}
41+
42+
@Override
43+
public boolean equals(Object o) {
44+
if (this == o) return true;
45+
if (!(o instanceof Role)) return false;
46+
47+
Role role = (Role) o;
48+
49+
return Objects.equals(id, role.id);
50+
}
51+
52+
@Override
53+
public int hashCode() {
54+
return 31;
55+
}
56+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.bobocode.model;
2+
3+
public enum RoleType {
4+
USER, ADMIN, OPERATOR, CUSTOMER
5+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.bobocode.model;
2+
3+
import lombok.*;
4+
5+
import javax.persistence.*;
6+
import java.time.LocalDate;
7+
import java.util.HashSet;
8+
import java.util.List;
9+
import java.util.Set;
10+
11+
12+
@NoArgsConstructor
13+
@Getter
14+
@Setter
15+
@ToString
16+
@EqualsAndHashCode(of = "id")
17+
@Entity
18+
@Table(name = "user")
19+
public class User {
20+
@Id
21+
@GeneratedValue
22+
private Long id;
23+
24+
@Column(name = "first_name")
25+
private String firstName;
26+
27+
@Column(name = "last_name")
28+
private String lastName;
29+
30+
@Column(name = "email")
31+
private String email;
32+
33+
@Column(name = "birthday")
34+
private LocalDate birthday;
35+
36+
@Column(name = "creation_date")
37+
private LocalDate creationDate;
38+
39+
40+
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
41+
private Address address;
42+
43+
@Setter(AccessLevel.PRIVATE)
44+
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
45+
private Set<Role> roles = new HashSet<>();
46+
47+
public void setAddress(Address address) {
48+
address.setUser(this);
49+
this.address = address;
50+
}
51+
52+
public void addRole(Role role) {
53+
roles.add(role);
54+
role.setUser(this);
55+
}
56+
57+
public void addRoles(List<Role> roles) {
58+
this.roles.addAll(roles);
59+
roles.forEach(role -> role.setUser(this));
60+
}
61+
62+
public void removeRole(Role role) {
63+
this.roles.remove(role);
64+
role.setUser(null);
65+
}
66+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>spring-data-jpa-exercises</artifactId>
7+
<groupId>com.bobocode</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>spring-data-jpa-exercises-util</artifactId>
13+
14+
<dependencies>
15+
<dependency>
16+
<groupId>com.bobocode</groupId>
17+
<artifactId>spring-data-jpa-exercises-model</artifactId>
18+
<version>1.0-SNAPSHOT</version>
19+
</dependency>
20+
<dependency>
21+
<groupId>io.codearte.jfairy</groupId>
22+
<artifactId>jfairy</artifactId>
23+
<version>0.5.7</version>
24+
</dependency>
25+
</dependencies>
26+
27+
</project>

0 commit comments

Comments
 (0)