У меня есть классы A и B, которые имеют отношение MxN. Однако, поскольку у этой связи есть атрибуты, мне нужно было создать класс AB для поддержания этой связи.
Я установил для всех атрибутов этой связи значение cascade.PERSIST, однако, когда я пытаюсь создать новый класс A, содержащий новый класс AB с новым классом B [все упомянутые являются транзиентными] транзакция с некоторыми завершается неудачно
Код: Выделить всё
org.springframework.orm.jpa.JpaSystemException: Could not set field value [SHORT_CIRCUIT_INDICATOR] value by reflection : [class br.com.fisgar.crm.model.entities.PersonClientLead$ID.clientLead] setter of br.com.fisgar.crm.model.entities.PersonClientLead$ID.clientLead;
nested exception is org.hibernate.PropertyAccessException: Could not set field value [SHORT_CIRCUIT_INDICATOR] value by reflection : [class br.com.fisgar.crm.model.entities.PersonClientLead$ID.clientLead] setter of br.com.fisgar.crm.model.entities.PersonClientLead$ID.clientLead
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:331)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:227)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:528)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:230)
это модель данных
Код: Выделить всё
@Entity
public class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "a", cascade = CascadeType.ALL, orphanRemoval = true)
private Set abSet = new HashSet();
}
@Entity
public class B {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "b", cascade = CascadeType.ALL, orphanRemoval = true)
private Set abSet = new HashSet();
}
@Entity
@IdClass(AB.ID.class)
public class AB {
@Id
@ManyToOne
@JoinColumn(name = "a_id")
private A a;
@Id
@ManyToOne
@JoinColumn(name = "b_id")
private B b;
@Getter
@AllArgsConstructor
@NoArgsConstructor
public static class ID implements Serializable {
private Long a;
private Long b;
//equals and hashcode goes here
}
}
Код: Выделить всё
A a = new A();
B b = new B();
AB ab = new AB();
a.getAbSet().add(ab);
b.getAbSet().add(ab);
ab.setA(a);
ab.setB(b);
aRepository.save(a);
я делаешь что-то не так?
Подробнее здесь: https://stackoverflow.com/questions/792 ... with-class