У меня есть две сущности, которые имеют судно двунаправленного отношения, как показано ниже: < /p>
@Data
@Accessors(chain = true)
@Builder
@Entity
@FieldDefaults(level = AccessLevel.PRIVATE)
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "refund_initiates")
public class RefundInitiate extends BaseEntityV3 {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;
// ... other fields
@OneToMany(mappedBy = "refundInitiate", cascade = CascadeType.ALL, orphanRemoval = true)
List refundLedgers = new ArrayList();
}
< /code>
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "refund_ledger")
@Entity
@Builder
public class AutomatedRefundLedger extends BaseEntityV3 {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;
// ... Other Fields
@ManyToOne
@JoinColumn(name = "refund_initiate_id", nullable = false)
RefundInitiate refundInitiate;
}
< /code>
As you see both are extending a base entity BaseEntityV3, this is an abstract class for audit purpose:
@Getter
@Setter
@ToString
@FieldDefaults(level = AccessLevel.PRIVATE)
@AllArgsConstructor
@NoArgsConstructor
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntityV3 {
@CreatedBy
@Column(name = "created_by")
Integer createdBy;
@CreatedDate
@Column(name = "created_on")
Date createdOn;
@LastModifiedBy
@Column(name = "updated_by")
Integer updatedBy;
@LastModifiedDate
@Column(name = "updated_on")
Date updatedOn;
@Column(name = "is_deleted")
Boolean deleted = Boolean.FALSE;
}
< /code>
This class is using @CreatedBy, @LastModifiedDate and other JPA Audit annotations.
Below we have AuditorAwareConfig класс:
@Configuration
@EnableJpaAuditing(auditorAwareRef = "userIdAuditorProvider")
public class AuditorAwareConfig {
@Bean(name = "userIdAuditorProvider")
public AuditorAware userIdAuditorProvider() {
return new AuditorAwareImpl();
}
}
@Component
class AuditorAwareImpl implements AuditorAware {
@Autowired
EmployeeRepository employeeRepo;
@Override
public Optional getCurrentAuditor() {
try {
final Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return Optional.of((principal instanceof UserDetails)
? this.getEmployeeId(((UserDetails) principal).getUsername())
: 1);
} catch (Exception e) {
return Optional.of(1);
}
}
private Integer getEmployeeId(String username) {
// TODO: Remove TEST CODE
return employeeRepo.findFirstByUsername(username).map(Employee::getId).orElse(1);
}
}
< /code>
Now here's the issue:
public AutomatedRefundLedger updateAutomatedRefundLedger(AutomatedRefundLedgerReq updateReq) {
AutomatedRefundLedger existingLedger = automatedRefundLedgerRepo.findById(updateReq.getId()).orElseThrow();
// Updates the fields of existingLedger (doesnt save it in DB)
this.updateFieldOfExistingLedger(existingLedger, updateReq);
// Saving the changes: This is where I get the error
return automatedRefundLedgerRepo.save(existingLedger);
}
< /code>
While saving the change I get error saying that:
[Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: Found shared references to a collection: payments.module.data.model.RefundInitiate.refundLedgers; nested exception is org.hibernate.HibernateException: Found shared references to a collection: payments.module.data.model.RefundInitiate.refundLedgers] with root cause
org.hibernate.HibernateException: Found shared references to a collection: payments.module.data.model.RefundInitiate.refundLedgers
< /code>
If I remove the JPA audit annotation like @CreatedBy, @CreatedDate, @LastModifiedBy and @LastModifiedDate, then it will work fine, also if I remove the extend BaseEntityV3 из обоих.
он также работает, если я удалю поле refundledgers из возмещения объекта. Он вручную использует @prepersit и @preupdate и использовал статический класс, чтобы получить идентификаторы сотрудников, но все же ошибка, которую я получил. , Потому что в последних, я не получаю такую ошибку, вот версия Springboot, которую используют: < /p>
id 'org.springframework.boot' version '2.3.4.RELEASE'
Подробнее здесь: https://stackoverflow.com/questions/793 ... erence-err
В Spring Boot @prepersist и @createdby вызывает обнаруженную общую ссылочную ошибку ⇐ JAVA
Программисты JAVA общаются здесь
1738040772
Anonymous
У меня есть две сущности, которые имеют судно двунаправленного отношения, как показано ниже: < /p>
@Data
@Accessors(chain = true)
@Builder
@Entity
@FieldDefaults(level = AccessLevel.PRIVATE)
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "refund_initiates")
public class RefundInitiate extends BaseEntityV3 {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;
// ... other fields
@OneToMany(mappedBy = "refundInitiate", cascade = CascadeType.ALL, orphanRemoval = true)
List refundLedgers = new ArrayList();
}
< /code>
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "refund_ledger")
@Entity
@Builder
public class AutomatedRefundLedger extends BaseEntityV3 {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;
// ... Other Fields
@ManyToOne
@JoinColumn(name = "refund_initiate_id", nullable = false)
RefundInitiate refundInitiate;
}
< /code>
As you see both are extending a base entity BaseEntityV3, this is an abstract class for audit purpose:
@Getter
@Setter
@ToString
@FieldDefaults(level = AccessLevel.PRIVATE)
@AllArgsConstructor
@NoArgsConstructor
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntityV3 {
@CreatedBy
@Column(name = "created_by")
Integer createdBy;
@CreatedDate
@Column(name = "created_on")
Date createdOn;
@LastModifiedBy
@Column(name = "updated_by")
Integer updatedBy;
@LastModifiedDate
@Column(name = "updated_on")
Date updatedOn;
@Column(name = "is_deleted")
Boolean deleted = Boolean.FALSE;
}
< /code>
This class is using @CreatedBy, @LastModifiedDate and other JPA Audit annotations.
Below we have AuditorAwareConfig класс:
@Configuration
@EnableJpaAuditing(auditorAwareRef = "userIdAuditorProvider")
public class AuditorAwareConfig {
@Bean(name = "userIdAuditorProvider")
public AuditorAware userIdAuditorProvider() {
return new AuditorAwareImpl();
}
}
@Component
class AuditorAwareImpl implements AuditorAware {
@Autowired
EmployeeRepository employeeRepo;
@Override
public Optional getCurrentAuditor() {
try {
final Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return Optional.of((principal instanceof UserDetails)
? this.getEmployeeId(((UserDetails) principal).getUsername())
: 1);
} catch (Exception e) {
return Optional.of(1);
}
}
private Integer getEmployeeId(String username) {
// TODO: Remove TEST CODE
return employeeRepo.findFirstByUsername(username).map(Employee::getId).orElse(1);
}
}
< /code>
Now here's the issue:
public AutomatedRefundLedger updateAutomatedRefundLedger(AutomatedRefundLedgerReq updateReq) {
AutomatedRefundLedger existingLedger = automatedRefundLedgerRepo.findById(updateReq.getId()).orElseThrow();
// Updates the fields of existingLedger (doesnt save it in DB)
this.updateFieldOfExistingLedger(existingLedger, updateReq);
// Saving the changes: This is where I get the error
return automatedRefundLedgerRepo.save(existingLedger);
}
< /code>
While saving the change I get error saying that:
[Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: Found shared references to a collection: payments.module.data.model.RefundInitiate.refundLedgers; nested exception is org.hibernate.HibernateException: Found shared references to a collection: payments.module.data.model.RefundInitiate.refundLedgers] with root cause
org.hibernate.HibernateException: Found shared references to a collection: payments.module.data.model.RefundInitiate.refundLedgers
< /code>
If I remove the JPA audit annotation like @CreatedBy, @CreatedDate, @LastModifiedBy and @LastModifiedDate, then it will work fine, also if I remove the extend BaseEntityV3 из обоих.
он также работает, если я удалю поле refundledgers из возмещения объекта. Он вручную использует @prepersit и @preupdate и использовал статический класс, чтобы получить идентификаторы сотрудников, но все же ошибка, которую я получил. , Потому что в последних, я не получаю такую ошибку, вот версия Springboot, которую используют: < /p>
id 'org.springframework.boot' version '2.3.4.RELEASE'
Подробнее здесь: [url]https://stackoverflow.com/questions/79392792/in-spring-boot-prepersist-and-createdby-are-causing-found-shared-reference-err[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия