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
Edit
Report