Why do I have to input ID (PK) - problem with auto generating ID
I'm creating renting a book method in my book rental. It looks like this:
@PostMapping("/book")
public void purchaseBook(@RequestParam("userID") int userID, @RequestParam("bookID") int bookID) {
bookRentalService.rentBook(userID, bookID);
}
After inputting userID and bookID, book if is available, it is added to BookRentalDB.
Relations between tables I made like this:
Entity of rentals:
package bookrental.model.book;
import bookrental.model.account.User;
import lombok.*;
import javax.persistence.*;
@Entity
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class BookRentals {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToOne
private Book book;
@OneToOne
private User user;
}
I've got problem with creating object of this entity(BookRentals) in Service. It needs to contain object of Book
and object of User
. I've created constructors for this object with only bookID
for Book
and userID
for User
. In prepareBookToRent
Im asked to put ID of BookRentals
class, too. In that case I can not to create object of it. Should it not be generated automatically? What should I do to make it work.
package bookrental.service.book;
import bookrental.model.account.User;
import bookrental.model.book.Book;
import bookrental.model.book.BookRentals;
import bookrental.repository.book.BookRepository;
import bookrental.repository.book.BookRentalsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookRentalService {
private final BookRepository bookRepository;
private final BookRentalsRepository bookRentalsRepository;
@Autowired
public BookRentalService(BookRepository bookRepository, BookRentalsRepository bookRentalsRepository) {
this.bookRepository = bookRepository;
this.bookRentalsRepository = bookRentalsRepository;
}
public void rentBook(int userID, int bookID) {
if (bookRepository.doesBookExistsWithGivenID(bookID)) {
Book bookToRent = bookRepository.findOne(bookID);
if (bookToRent.isAvailable()) {
updateBookAvailabilityAndSaveToDb(bookToRent);
BookRentals preparedBookToRent = prepareBookToRent(userID, bookID);
bookRentalsRepository.save(preparedBookToRent);
} else {
throw new IllegalArgumentException("Book is no available");
}
}
throw new IllegalArgumentException("Book does not exist!");
}
private BookRentals prepareBookToRent(int userID, int bookID) {
return new BookRentals(new Book(bookID),new User(userID)); // here im asked to input ID, too
}
private void updateBookAvailabilityAndSaveToDb(Book bookToRent) {
bookToRent.setAvailable(false);
bookRepository.save(bookToRent);
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.book.rental.piotrek</groupId>
<artifactId>BookRental</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
</dependencies>
</project>
Staktrace
C:UsersAdminIdeaProjectsBookRentalsrcmainjavabookrentalservicebookBookRentalService.java
Error:(39, 16) java: no suitable constructor found for BookRentals(bookrental.model.book.Book,bookrental.model.account.User)
constructor bookrental.model.book.BookRentals.BookRentals(int,bookrental.model.book.Book,bookrental.model.account.User) is not applicable
(actual and formal argument lists differ in length)
constructor bookrental.model.book.BookRentals.BookRentals() is not applicable
(actual and formal argument lists differ in length)
As I said above, this is it:
java spring-boot primary-key crud
add a comment |
I'm creating renting a book method in my book rental. It looks like this:
@PostMapping("/book")
public void purchaseBook(@RequestParam("userID") int userID, @RequestParam("bookID") int bookID) {
bookRentalService.rentBook(userID, bookID);
}
After inputting userID and bookID, book if is available, it is added to BookRentalDB.
Relations between tables I made like this:
Entity of rentals:
package bookrental.model.book;
import bookrental.model.account.User;
import lombok.*;
import javax.persistence.*;
@Entity
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class BookRentals {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToOne
private Book book;
@OneToOne
private User user;
}
I've got problem with creating object of this entity(BookRentals) in Service. It needs to contain object of Book
and object of User
. I've created constructors for this object with only bookID
for Book
and userID
for User
. In prepareBookToRent
Im asked to put ID of BookRentals
class, too. In that case I can not to create object of it. Should it not be generated automatically? What should I do to make it work.
package bookrental.service.book;
import bookrental.model.account.User;
import bookrental.model.book.Book;
import bookrental.model.book.BookRentals;
import bookrental.repository.book.BookRepository;
import bookrental.repository.book.BookRentalsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookRentalService {
private final BookRepository bookRepository;
private final BookRentalsRepository bookRentalsRepository;
@Autowired
public BookRentalService(BookRepository bookRepository, BookRentalsRepository bookRentalsRepository) {
this.bookRepository = bookRepository;
this.bookRentalsRepository = bookRentalsRepository;
}
public void rentBook(int userID, int bookID) {
if (bookRepository.doesBookExistsWithGivenID(bookID)) {
Book bookToRent = bookRepository.findOne(bookID);
if (bookToRent.isAvailable()) {
updateBookAvailabilityAndSaveToDb(bookToRent);
BookRentals preparedBookToRent = prepareBookToRent(userID, bookID);
bookRentalsRepository.save(preparedBookToRent);
} else {
throw new IllegalArgumentException("Book is no available");
}
}
throw new IllegalArgumentException("Book does not exist!");
}
private BookRentals prepareBookToRent(int userID, int bookID) {
return new BookRentals(new Book(bookID),new User(userID)); // here im asked to input ID, too
}
private void updateBookAvailabilityAndSaveToDb(Book bookToRent) {
bookToRent.setAvailable(false);
bookRepository.save(bookToRent);
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.book.rental.piotrek</groupId>
<artifactId>BookRental</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
</dependencies>
</project>
Staktrace
C:UsersAdminIdeaProjectsBookRentalsrcmainjavabookrentalservicebookBookRentalService.java
Error:(39, 16) java: no suitable constructor found for BookRentals(bookrental.model.book.Book,bookrental.model.account.User)
constructor bookrental.model.book.BookRentals.BookRentals(int,bookrental.model.book.Book,bookrental.model.account.User) is not applicable
(actual and formal argument lists differ in length)
constructor bookrental.model.book.BookRentals.BookRentals() is not applicable
(actual and formal argument lists differ in length)
As I said above, this is it:
java spring-boot primary-key crud
Please post the error stacktrace. Also add info about the database type and version, Spring boot version, Java version, JPA provider.
– user10639668
Nov 20 '18 at 9:29
@EugenCovaci updated pom.xml and stratrace.
– pipilam
Nov 20 '18 at 9:36
Your issue has nothing to do with JPA auto generated id, but with improper use of Lombok.
– user10639668
Nov 20 '18 at 9:38
@EugenCovaci should I exclude then ID from costructor as Sarief in asnswer said?
– pipilam
Nov 20 '18 at 9:39
@EugenCovaci see updated answer then. Didn't notice OneToOne annotation on the mapping class. It didn't make sense, so my brain ignored it
– Sarief
Nov 20 '18 at 9:53
add a comment |
I'm creating renting a book method in my book rental. It looks like this:
@PostMapping("/book")
public void purchaseBook(@RequestParam("userID") int userID, @RequestParam("bookID") int bookID) {
bookRentalService.rentBook(userID, bookID);
}
After inputting userID and bookID, book if is available, it is added to BookRentalDB.
Relations between tables I made like this:
Entity of rentals:
package bookrental.model.book;
import bookrental.model.account.User;
import lombok.*;
import javax.persistence.*;
@Entity
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class BookRentals {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToOne
private Book book;
@OneToOne
private User user;
}
I've got problem with creating object of this entity(BookRentals) in Service. It needs to contain object of Book
and object of User
. I've created constructors for this object with only bookID
for Book
and userID
for User
. In prepareBookToRent
Im asked to put ID of BookRentals
class, too. In that case I can not to create object of it. Should it not be generated automatically? What should I do to make it work.
package bookrental.service.book;
import bookrental.model.account.User;
import bookrental.model.book.Book;
import bookrental.model.book.BookRentals;
import bookrental.repository.book.BookRepository;
import bookrental.repository.book.BookRentalsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookRentalService {
private final BookRepository bookRepository;
private final BookRentalsRepository bookRentalsRepository;
@Autowired
public BookRentalService(BookRepository bookRepository, BookRentalsRepository bookRentalsRepository) {
this.bookRepository = bookRepository;
this.bookRentalsRepository = bookRentalsRepository;
}
public void rentBook(int userID, int bookID) {
if (bookRepository.doesBookExistsWithGivenID(bookID)) {
Book bookToRent = bookRepository.findOne(bookID);
if (bookToRent.isAvailable()) {
updateBookAvailabilityAndSaveToDb(bookToRent);
BookRentals preparedBookToRent = prepareBookToRent(userID, bookID);
bookRentalsRepository.save(preparedBookToRent);
} else {
throw new IllegalArgumentException("Book is no available");
}
}
throw new IllegalArgumentException("Book does not exist!");
}
private BookRentals prepareBookToRent(int userID, int bookID) {
return new BookRentals(new Book(bookID),new User(userID)); // here im asked to input ID, too
}
private void updateBookAvailabilityAndSaveToDb(Book bookToRent) {
bookToRent.setAvailable(false);
bookRepository.save(bookToRent);
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.book.rental.piotrek</groupId>
<artifactId>BookRental</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
</dependencies>
</project>
Staktrace
C:UsersAdminIdeaProjectsBookRentalsrcmainjavabookrentalservicebookBookRentalService.java
Error:(39, 16) java: no suitable constructor found for BookRentals(bookrental.model.book.Book,bookrental.model.account.User)
constructor bookrental.model.book.BookRentals.BookRentals(int,bookrental.model.book.Book,bookrental.model.account.User) is not applicable
(actual and formal argument lists differ in length)
constructor bookrental.model.book.BookRentals.BookRentals() is not applicable
(actual and formal argument lists differ in length)
As I said above, this is it:
java spring-boot primary-key crud
I'm creating renting a book method in my book rental. It looks like this:
@PostMapping("/book")
public void purchaseBook(@RequestParam("userID") int userID, @RequestParam("bookID") int bookID) {
bookRentalService.rentBook(userID, bookID);
}
After inputting userID and bookID, book if is available, it is added to BookRentalDB.
Relations between tables I made like this:
Entity of rentals:
package bookrental.model.book;
import bookrental.model.account.User;
import lombok.*;
import javax.persistence.*;
@Entity
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class BookRentals {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToOne
private Book book;
@OneToOne
private User user;
}
I've got problem with creating object of this entity(BookRentals) in Service. It needs to contain object of Book
and object of User
. I've created constructors for this object with only bookID
for Book
and userID
for User
. In prepareBookToRent
Im asked to put ID of BookRentals
class, too. In that case I can not to create object of it. Should it not be generated automatically? What should I do to make it work.
package bookrental.service.book;
import bookrental.model.account.User;
import bookrental.model.book.Book;
import bookrental.model.book.BookRentals;
import bookrental.repository.book.BookRepository;
import bookrental.repository.book.BookRentalsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookRentalService {
private final BookRepository bookRepository;
private final BookRentalsRepository bookRentalsRepository;
@Autowired
public BookRentalService(BookRepository bookRepository, BookRentalsRepository bookRentalsRepository) {
this.bookRepository = bookRepository;
this.bookRentalsRepository = bookRentalsRepository;
}
public void rentBook(int userID, int bookID) {
if (bookRepository.doesBookExistsWithGivenID(bookID)) {
Book bookToRent = bookRepository.findOne(bookID);
if (bookToRent.isAvailable()) {
updateBookAvailabilityAndSaveToDb(bookToRent);
BookRentals preparedBookToRent = prepareBookToRent(userID, bookID);
bookRentalsRepository.save(preparedBookToRent);
} else {
throw new IllegalArgumentException("Book is no available");
}
}
throw new IllegalArgumentException("Book does not exist!");
}
private BookRentals prepareBookToRent(int userID, int bookID) {
return new BookRentals(new Book(bookID),new User(userID)); // here im asked to input ID, too
}
private void updateBookAvailabilityAndSaveToDb(Book bookToRent) {
bookToRent.setAvailable(false);
bookRepository.save(bookToRent);
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.book.rental.piotrek</groupId>
<artifactId>BookRental</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
</dependencies>
</project>
Staktrace
C:UsersAdminIdeaProjectsBookRentalsrcmainjavabookrentalservicebookBookRentalService.java
Error:(39, 16) java: no suitable constructor found for BookRentals(bookrental.model.book.Book,bookrental.model.account.User)
constructor bookrental.model.book.BookRentals.BookRentals(int,bookrental.model.book.Book,bookrental.model.account.User) is not applicable
(actual and formal argument lists differ in length)
constructor bookrental.model.book.BookRentals.BookRentals() is not applicable
(actual and formal argument lists differ in length)
As I said above, this is it:
java spring-boot primary-key crud
java spring-boot primary-key crud
edited Nov 20 '18 at 9:35
asked Nov 20 '18 at 9:19
pipilam
795
795
Please post the error stacktrace. Also add info about the database type and version, Spring boot version, Java version, JPA provider.
– user10639668
Nov 20 '18 at 9:29
@EugenCovaci updated pom.xml and stratrace.
– pipilam
Nov 20 '18 at 9:36
Your issue has nothing to do with JPA auto generated id, but with improper use of Lombok.
– user10639668
Nov 20 '18 at 9:38
@EugenCovaci should I exclude then ID from costructor as Sarief in asnswer said?
– pipilam
Nov 20 '18 at 9:39
@EugenCovaci see updated answer then. Didn't notice OneToOne annotation on the mapping class. It didn't make sense, so my brain ignored it
– Sarief
Nov 20 '18 at 9:53
add a comment |
Please post the error stacktrace. Also add info about the database type and version, Spring boot version, Java version, JPA provider.
– user10639668
Nov 20 '18 at 9:29
@EugenCovaci updated pom.xml and stratrace.
– pipilam
Nov 20 '18 at 9:36
Your issue has nothing to do with JPA auto generated id, but with improper use of Lombok.
– user10639668
Nov 20 '18 at 9:38
@EugenCovaci should I exclude then ID from costructor as Sarief in asnswer said?
– pipilam
Nov 20 '18 at 9:39
@EugenCovaci see updated answer then. Didn't notice OneToOne annotation on the mapping class. It didn't make sense, so my brain ignored it
– Sarief
Nov 20 '18 at 9:53
Please post the error stacktrace. Also add info about the database type and version, Spring boot version, Java version, JPA provider.
– user10639668
Nov 20 '18 at 9:29
Please post the error stacktrace. Also add info about the database type and version, Spring boot version, Java version, JPA provider.
– user10639668
Nov 20 '18 at 9:29
@EugenCovaci updated pom.xml and stratrace.
– pipilam
Nov 20 '18 at 9:36
@EugenCovaci updated pom.xml and stratrace.
– pipilam
Nov 20 '18 at 9:36
Your issue has nothing to do with JPA auto generated id, but with improper use of Lombok.
– user10639668
Nov 20 '18 at 9:38
Your issue has nothing to do with JPA auto generated id, but with improper use of Lombok.
– user10639668
Nov 20 '18 at 9:38
@EugenCovaci should I exclude then ID from costructor as Sarief in asnswer said?
– pipilam
Nov 20 '18 at 9:39
@EugenCovaci should I exclude then ID from costructor as Sarief in asnswer said?
– pipilam
Nov 20 '18 at 9:39
@EugenCovaci see updated answer then. Didn't notice OneToOne annotation on the mapping class. It didn't make sense, so my brain ignored it
– Sarief
Nov 20 '18 at 9:53
@EugenCovaci see updated answer then. Didn't notice OneToOne annotation on the mapping class. It didn't make sense, so my brain ignored it
– Sarief
Nov 20 '18 at 9:53
add a comment |
1 Answer
1
active
oldest
votes
You're wrong, you created all args contstructor. You have 3 attributes. This means, you have all args constructor with 3 arguments not 2.
Just create custom constructor.
public BookRentals (Book book, User user) {
// logic
}
ps: why not possible to exclude some parameter from all args: Java Lombok: Omitting one field in @AllArgsConstructor?
upd: comments are stating something crazy. So, if you got one to one, use annotation on entity directly. If you got many to many, consider OneToMany, as having multiple users renting same book is not realistic.
refer to this for table design: How to implement one-to-one, one-to-many and many-to-many relationships while designing tables?
And ID will be genereated automatically?
– pipilam
Nov 20 '18 at 9:35
Id, if annotated properly, will be generated once you save the entity
– Sarief
Nov 20 '18 at 9:37
1
I've got it properly annotated, right? :D Why should I consider @OneToMany - one book can be only once rented by only one user.
– pipilam
Nov 20 '18 at 9:40
1
@pipilam as for why... this is convention. This conventions are used not only by you but by frameworks you use. Doing desing in accepted conventions helps you to easily integrate with those frameworks. QueryDsl and Spring Data can generate meta entities based on those designs, other developers immidiately know how things work, etc.
– Sarief
Nov 20 '18 at 12:14
1
well, I tried to understand concept of what is in the link. I think that you didn't understand how I'm trying to make it. I illustrated it on the picture. Im creating 3 entities - one for books, one for users and one for rentals. I need 3 tables to it. I need OneToOne relation. Unfortunately I do not understand what you mean. I think I will leave like I have written.
– pipilam
Nov 20 '18 at 14:34
|
show 15 more comments
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53389763%2fwhy-do-i-have-to-input-id-pk-problem-with-auto-generating-id%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You're wrong, you created all args contstructor. You have 3 attributes. This means, you have all args constructor with 3 arguments not 2.
Just create custom constructor.
public BookRentals (Book book, User user) {
// logic
}
ps: why not possible to exclude some parameter from all args: Java Lombok: Omitting one field in @AllArgsConstructor?
upd: comments are stating something crazy. So, if you got one to one, use annotation on entity directly. If you got many to many, consider OneToMany, as having multiple users renting same book is not realistic.
refer to this for table design: How to implement one-to-one, one-to-many and many-to-many relationships while designing tables?
And ID will be genereated automatically?
– pipilam
Nov 20 '18 at 9:35
Id, if annotated properly, will be generated once you save the entity
– Sarief
Nov 20 '18 at 9:37
1
I've got it properly annotated, right? :D Why should I consider @OneToMany - one book can be only once rented by only one user.
– pipilam
Nov 20 '18 at 9:40
1
@pipilam as for why... this is convention. This conventions are used not only by you but by frameworks you use. Doing desing in accepted conventions helps you to easily integrate with those frameworks. QueryDsl and Spring Data can generate meta entities based on those designs, other developers immidiately know how things work, etc.
– Sarief
Nov 20 '18 at 12:14
1
well, I tried to understand concept of what is in the link. I think that you didn't understand how I'm trying to make it. I illustrated it on the picture. Im creating 3 entities - one for books, one for users and one for rentals. I need 3 tables to it. I need OneToOne relation. Unfortunately I do not understand what you mean. I think I will leave like I have written.
– pipilam
Nov 20 '18 at 14:34
|
show 15 more comments
You're wrong, you created all args contstructor. You have 3 attributes. This means, you have all args constructor with 3 arguments not 2.
Just create custom constructor.
public BookRentals (Book book, User user) {
// logic
}
ps: why not possible to exclude some parameter from all args: Java Lombok: Omitting one field in @AllArgsConstructor?
upd: comments are stating something crazy. So, if you got one to one, use annotation on entity directly. If you got many to many, consider OneToMany, as having multiple users renting same book is not realistic.
refer to this for table design: How to implement one-to-one, one-to-many and many-to-many relationships while designing tables?
And ID will be genereated automatically?
– pipilam
Nov 20 '18 at 9:35
Id, if annotated properly, will be generated once you save the entity
– Sarief
Nov 20 '18 at 9:37
1
I've got it properly annotated, right? :D Why should I consider @OneToMany - one book can be only once rented by only one user.
– pipilam
Nov 20 '18 at 9:40
1
@pipilam as for why... this is convention. This conventions are used not only by you but by frameworks you use. Doing desing in accepted conventions helps you to easily integrate with those frameworks. QueryDsl and Spring Data can generate meta entities based on those designs, other developers immidiately know how things work, etc.
– Sarief
Nov 20 '18 at 12:14
1
well, I tried to understand concept of what is in the link. I think that you didn't understand how I'm trying to make it. I illustrated it on the picture. Im creating 3 entities - one for books, one for users and one for rentals. I need 3 tables to it. I need OneToOne relation. Unfortunately I do not understand what you mean. I think I will leave like I have written.
– pipilam
Nov 20 '18 at 14:34
|
show 15 more comments
You're wrong, you created all args contstructor. You have 3 attributes. This means, you have all args constructor with 3 arguments not 2.
Just create custom constructor.
public BookRentals (Book book, User user) {
// logic
}
ps: why not possible to exclude some parameter from all args: Java Lombok: Omitting one field in @AllArgsConstructor?
upd: comments are stating something crazy. So, if you got one to one, use annotation on entity directly. If you got many to many, consider OneToMany, as having multiple users renting same book is not realistic.
refer to this for table design: How to implement one-to-one, one-to-many and many-to-many relationships while designing tables?
You're wrong, you created all args contstructor. You have 3 attributes. This means, you have all args constructor with 3 arguments not 2.
Just create custom constructor.
public BookRentals (Book book, User user) {
// logic
}
ps: why not possible to exclude some parameter from all args: Java Lombok: Omitting one field in @AllArgsConstructor?
upd: comments are stating something crazy. So, if you got one to one, use annotation on entity directly. If you got many to many, consider OneToMany, as having multiple users renting same book is not realistic.
refer to this for table design: How to implement one-to-one, one-to-many and many-to-many relationships while designing tables?
edited Nov 20 '18 at 12:03
answered Nov 20 '18 at 9:34
Sarief
387317
387317
And ID will be genereated automatically?
– pipilam
Nov 20 '18 at 9:35
Id, if annotated properly, will be generated once you save the entity
– Sarief
Nov 20 '18 at 9:37
1
I've got it properly annotated, right? :D Why should I consider @OneToMany - one book can be only once rented by only one user.
– pipilam
Nov 20 '18 at 9:40
1
@pipilam as for why... this is convention. This conventions are used not only by you but by frameworks you use. Doing desing in accepted conventions helps you to easily integrate with those frameworks. QueryDsl and Spring Data can generate meta entities based on those designs, other developers immidiately know how things work, etc.
– Sarief
Nov 20 '18 at 12:14
1
well, I tried to understand concept of what is in the link. I think that you didn't understand how I'm trying to make it. I illustrated it on the picture. Im creating 3 entities - one for books, one for users and one for rentals. I need 3 tables to it. I need OneToOne relation. Unfortunately I do not understand what you mean. I think I will leave like I have written.
– pipilam
Nov 20 '18 at 14:34
|
show 15 more comments
And ID will be genereated automatically?
– pipilam
Nov 20 '18 at 9:35
Id, if annotated properly, will be generated once you save the entity
– Sarief
Nov 20 '18 at 9:37
1
I've got it properly annotated, right? :D Why should I consider @OneToMany - one book can be only once rented by only one user.
– pipilam
Nov 20 '18 at 9:40
1
@pipilam as for why... this is convention. This conventions are used not only by you but by frameworks you use. Doing desing in accepted conventions helps you to easily integrate with those frameworks. QueryDsl and Spring Data can generate meta entities based on those designs, other developers immidiately know how things work, etc.
– Sarief
Nov 20 '18 at 12:14
1
well, I tried to understand concept of what is in the link. I think that you didn't understand how I'm trying to make it. I illustrated it on the picture. Im creating 3 entities - one for books, one for users and one for rentals. I need 3 tables to it. I need OneToOne relation. Unfortunately I do not understand what you mean. I think I will leave like I have written.
– pipilam
Nov 20 '18 at 14:34
And ID will be genereated automatically?
– pipilam
Nov 20 '18 at 9:35
And ID will be genereated automatically?
– pipilam
Nov 20 '18 at 9:35
Id, if annotated properly, will be generated once you save the entity
– Sarief
Nov 20 '18 at 9:37
Id, if annotated properly, will be generated once you save the entity
– Sarief
Nov 20 '18 at 9:37
1
1
I've got it properly annotated, right? :D Why should I consider @OneToMany - one book can be only once rented by only one user.
– pipilam
Nov 20 '18 at 9:40
I've got it properly annotated, right? :D Why should I consider @OneToMany - one book can be only once rented by only one user.
– pipilam
Nov 20 '18 at 9:40
1
1
@pipilam as for why... this is convention. This conventions are used not only by you but by frameworks you use. Doing desing in accepted conventions helps you to easily integrate with those frameworks. QueryDsl and Spring Data can generate meta entities based on those designs, other developers immidiately know how things work, etc.
– Sarief
Nov 20 '18 at 12:14
@pipilam as for why... this is convention. This conventions are used not only by you but by frameworks you use. Doing desing in accepted conventions helps you to easily integrate with those frameworks. QueryDsl and Spring Data can generate meta entities based on those designs, other developers immidiately know how things work, etc.
– Sarief
Nov 20 '18 at 12:14
1
1
well, I tried to understand concept of what is in the link. I think that you didn't understand how I'm trying to make it. I illustrated it on the picture. Im creating 3 entities - one for books, one for users and one for rentals. I need 3 tables to it. I need OneToOne relation. Unfortunately I do not understand what you mean. I think I will leave like I have written.
– pipilam
Nov 20 '18 at 14:34
well, I tried to understand concept of what is in the link. I think that you didn't understand how I'm trying to make it. I illustrated it on the picture. Im creating 3 entities - one for books, one for users and one for rentals. I need 3 tables to it. I need OneToOne relation. Unfortunately I do not understand what you mean. I think I will leave like I have written.
– pipilam
Nov 20 '18 at 14:34
|
show 15 more comments
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53389763%2fwhy-do-i-have-to-input-id-pk-problem-with-auto-generating-id%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Please post the error stacktrace. Also add info about the database type and version, Spring boot version, Java version, JPA provider.
– user10639668
Nov 20 '18 at 9:29
@EugenCovaci updated pom.xml and stratrace.
– pipilam
Nov 20 '18 at 9:36
Your issue has nothing to do with JPA auto generated id, but with improper use of Lombok.
– user10639668
Nov 20 '18 at 9:38
@EugenCovaci should I exclude then ID from costructor as Sarief in asnswer said?
– pipilam
Nov 20 '18 at 9:39
@EugenCovaci see updated answer then. Didn't notice OneToOne annotation on the mapping class. It didn't make sense, so my brain ignored it
– Sarief
Nov 20 '18 at 9:53