类型不匹配:推断类型为 () -> JoinColumn,但应为 JoinColumn

Type mismatch: inferred type is () -> JoinColumn but JoinColumn was expected

我们正在使用 Corda 4、Springboot 网络服务器和 Postgresql 11。

以下是使用的Corda平台、Springboot服务器和其他基本依赖的版本-

cordaReleaseGroup=net.corda
cordaVersion=4.0
gradlePluginsVersion=4.0.45
kotlinVersion=1.2.71
junitVersion=4.12
quasarVersion=0.7.10
spring_version = '4.3.11.RELEASE'
spring_boot_version = '2.0.2.RELEASE'
spring_boot_gradle_plugin_version = '2.1.1.RELEASE'
jvmTarget = "1.8"
log4jVersion =2.11.2
platformVersion=4
slf4jVersion=1.7.25
nettyVersion=4.1.22.Final

我们能够实现将单个交易记录从一个节点发送到另一个节点的目标金库 table。

我们遇到了一个需求,其中交易是一对多类型的,为此需要在保险库中创建父子 tables。

以下是为父子 table 创建模式的代码,但它会在编译时抛出错误 - "Type mismatch: inferred type is () -> JoinColumn but JoinColumn was expected"。

import net.corda.core.schemas.MappedSchema
import net.corda.core.schemas.PersistentState
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
import java.util.UUID

object Schema1

object SchemaV1 : MappedSchema(
    schemaFamily = Schema1.javaClass,
    version = 1,
    mappedTypes = listOf(PersistentEmployees::class.java,PersistentEmployeeVehicles::class.java)) 
{
@Entity
@Table(name = "TBL_EMPLOYEES")
class PersistentEmployees(
    @Column(name = "EmployeeId")
    var Pid: Long,

    @Column(name = "EmployeeName")
    var EmployeeName: String,

    @Column(name = "EmployeeAddress") 
    var EmployeeAddress: String,

    @OneToMany(cascade = [(CascadeType.PERSIST)])
    @JoinColumns({
        JoinColumn(name = "output_index", referencedColumnName = "output_index");
        JoinColumn(name = "transaction_id", referencedColumnName = "transaction_id") })        
    private val EmpVehicles:List<PersistentEmployeeVehicles>

) : PersistentState(), Serializable

@Entity
@Table(name = "TBL_EMPLOYEE_VEHICLES")
class PersistentEmployeeVehicles(
    @Column(name = "ID")
    var ID: UUID,

    @Column(name = "VEHICLETYPE") 
    var VEHICLETYPE: String,

    @Column(name = "VEHICLEMODEL") 
    var VEHICLEMODEL: String,

    @Column(name = "VEHICLENUMBER") 
    var VEHICLENUMBER: String
)
}

问题 1:错误的原因是什么以及解决方案(如果可能)?

我们使用了来自 Corda Git Hub 的 "Car insurance" "One-to-many" 映射样本。以下是链接-

"https://github.com/corda/samples/blob/release-V4/carinsurance-QueryableState/contracts/src/main/java/net/corda/examples/carinsurance/schema/PersistentInsurance.java"

"https://github.com/corda/samples/blob/release-V4/carinsurance-QueryableState/contracts/src/main/java/net/corda/examples/carinsurance/schema/PersistentClaim.java"

在注释中声明数组的语法在 Java 和 Kotlin 之间是不同的,对于 Kotlin,您应该像下面这样使用 []

@JoinColumns(value = [
    JoinColumn(name = "output_index", referencedColumnName = "output_index"),
    JoinColumn(name = "transaction_id", referencedColumnName = "transaction_id") ])      
private val EmpVehicles:List<PersistentEmployeeVehicles>