[英]@Where annotation with @ManyToOne relationship retrieves soft deleted entity
[英]Creating an entity with a ManyToOne annotation
我正在創建一個與另一個具有多對一關系的實體,它是多個客戶可以屬於一家公司。 現在我的客戶實體定義如下:
@Entity
@Table(name = "Customers")
data class Customer(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var customerId: Long? = null,
var firstName: String,
var lastName: String,
var gender: String,
@Column(insertable = false, updatable = false)
var companyId: Long,
@ManyToOne(targetEntity = Company::class, fetch = FetchType.LAZY)
@JoinColumn(name = "companyId", referencedColumnName = "companyId")
var company: Company? = null,
var profilePicture: String,
var email: String,
var phone: String,
var birthDay: String,
var bio: String,
var notifyByPhone: Boolean,
var notifyByEmail: Boolean,
var notifyBySms: Boolean,
@UpdateTimestamp
var updatedAt: LocalDateTime,
@CreationTimestamp
var createdAt: LocalDateTime
)
我使用 CustomerResource 中的以下函數作為端點來持久化客戶:
@Transactional
@POST
fun post(@Valid entity: Customer): Response = try {
repository.persist(entity)
created(entity)
} catch (exc: Exception) {
serverError(exc)
}
使用 Postman,我使用以下 JSON 對象向端點發出請求:
{
"firstName": "Ricardo",
"lastName": "de Vries",
"gender": "male",
"companyId": "200",
"profilePicture": "test",
"email": "mail@gmail.com",
"phone": "0612536263",
"birthDay": "28-12-1995",
"bio": "Nothing",
"notifyByPhone": true,
"notifyByEmail": true,
"notifyBySms": true
}
我有一個名為“公司”的屬性,它根據 companyId 映射到用戶所屬的公司。 我有一個單獨的 companyId 字段,它被映射到數據庫中的 companyId 字段。
當我想創建一個新客戶時,我在請求中包含了 companyId。 這成功了,並且正在成功創建客戶。
現在,當我嘗試獲取該特定客戶時,我得到以下信息
error: "org.hibernate.PropertyAccessException: Null value was assigned to a property [class org.acme.domains.core.models.entities.Customer.companyId] of primitive type setter of org.acme.domains.core.models.entities.Customer.companyId".
我真的不明白為什么會發生這個錯誤。 我認為,每當我獲取特定客戶時,屬於客戶的公司會在之后添加。
有人知道如何以這種方式添加實體嗎?
您是否生成了正確的 getter 和 setter? 似乎第一個請求未能正確設置字段。 我建議您在創建客戶的控制器上放置一個斷點,並檢查該字段是否按應有的方式設置。 也許您以錯誤的格式傳遞數據等。我不能從這些信息中說出來,但您應該調試它。
您還可以在您的字段上放置@NotNull 驗證,以查看它是否在對象創建中設置失敗。
您已將companyId
映射為不可插入且不可更新,因此它不會出現在查詢中。
嘗試將其更改為:
@Column(insertable = true, updatable = true)
Long companyId
我認為發生了什么,是 Hibernate ORM 正在使用除此之外的所有其他值創建插入查詢。 我建議啟用日志來檢查。 您可以通過設置在配置中執行此操作:
hibernate.show_sql = true
hibernate.format_sql = true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.