8
I have an Entity class Payment which has Entity class PaymentMethod with Many to one relationship.
Now since My PaymentMethod is master table.
So I want to save payment without affecting the master table PaymentMethod.
But every time I save the Payment it inserts a new row in PaymentMethod too. I am unable to figure out why.
I am using SpringData save.
Payment.java
@Entity
@Table(name="payment")
public class Payment implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade={CascadeType.REFRESH,CascadeType.MERGE,CascadeType.PERSIST})
@JoinColumn(name="payment_method_id")
private PaymentMethod paymentMethod;
//getter and setters
}
PaymentMethod.java
@Table(name="paymentmethod")
public class PaymentMethod implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="name",unique=true ,nullable=false)
private String name;
//GETTER AND SETTERS
}
PAYMENT_METHOD DATA
ID | NAME
1 | AA
2 | BB
3 | CC
After payment get save PAYMENT_METHOD entry with duplicate name ?
I am unable to figure out why.
For saving I have created a simple CRUDRepository for Payment type
calling save entity of repository.
Please suggest where I am falling out.
whenever code executes this line :
paymentMethodRepository.findByName(payment.getPaymentMethod().getName());
It gives error as
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: com.enrollment.domain.Payment.paymentMethod -> com.enrollment.domain.Payment