场景1--Case类
Astyanax无法在val
上获取注释@id
@Entity case class Organization(@Id @Column(name = "id") override val id: Option[UUID] = None, @Column(name = "created_on") override val createdOn: Option[Date] = None, @Column(name = "modified_on") override val modifiedOn: Option[Date] = None, @Column(name = "name") name: Option[String] = None, @Column(name = "is_paid_account") isPaidAccount: Boolean = false) extends IdBaseEntity[UUID](id, createdOn, modifiedOn)
场景2-有伴生对象的类或无伴生对象的类
@Entity class Organization(@Id @Column(name = "id") override val id: Option[UUID] = None, @Column(name = "created_on") override val createdOn: Option[Date] = None, @Column(name = "modified_on") override val modifiedOn: Option[Date] = None, @Column(name = "name") name: Option[String] = None, @Column(name = "is_paid_account") isPaidAccount: Boolean = false) extends IdBaseEntity[UUID](id, createdOn, modifiedOn) object Organization { def apply(id: Option[UUID] = None, createdOn: Option[Date] = None, modifiedOn: Option[Date] = None, name: Option[String] = None, isPaidAccount: Boolean = false) = new Organization(id, createdOn, modifiedOn, name, isPaidAccount) }
@Entity case class Organization(@Id @Column(name = "id") override val id: Option[UUID] = None, @Column(name = "created_on") override val createdOn: Option[Date] = None, @Column(name = "modified_on") override val modifiedOn: Option[Date] = None, @Column(name = "name") name: Option[String] = None, @Column(name = "is_paid_account") isPaidAccount: Boolean = false) extends IdBaseEntity[UUID](id, createdOn, modifiedOn) { @Id @Column(name = "id") val theId: Option[UUID] = id }
除了#3,我在类块中声明了一个val,而不是case类或常规类/常规类的参数列表,我的每个场景都失败了。Astyanax说,该类中有一个know成员用@id
注释,所以它会抛出异常。在我进一步挖掘之前,我想我应该询问社区关于注释scala类和将其发送到执行反射的java库之间的细微差别。来源没有什么特别的。事实上,以下是失败的相关行:https://github.com/netflix/astyanax/blob/master/astyanax-entity-mapper/src/main/java/com/netflix/astyanax/entitystore/entitymapper.java#l89-120
class CassandraOrganizationDAO extends BaseCassandraDAO[Organization, UUID](Astyanax.context) with OrganizationDAO { val ColumnFamilyOrganizations: ColumnFamily[UUID, String] = new ColumnFamily[UUID, String]( "organizations", TimeUUIDSerializer.get(), StringSerializer.get(), ByteBufferSerializer.get()) val ColumnFamilyOrganizationMembers: ColumnFamily[UUID, UUID] = new ColumnFamily[UUID, UUID]( "organization_members", TimeUUIDSerializer.get(), TimeUUIDSerializer.get(), DateSerializer.get()) val manager: EntityManager[Organization, UUID] = new DefaultEntityManager.Builder[Organization, UUID]() .withEntityType(classOf[Organization]) .withKeyspace(getKeyspace()) .withColumnFamily(ColumnFamilyOrganizations) .build() // the rest of the class is omitted }
我遇到了一个类似的问题,在构造函数的字段中从来没有考虑到我的注释。实际上,我使用了SpringData,不可能直接将注释(如@indexed
)映射到字段上。
要在case类的构造函数中启用批注,首先应该创建这样的类:
object FixedScalaAnnotations {
type Id = com.packagecontainingid.Id @field //replace by the right package
type Column = com.packagecontainingcolumn.Column @field
}
然后在case类中导入它,并使用它来代替原始的:
import FixedScalaAnnotations._
@Entity
case class Organization(@Id @Column(name = "id") override val id: Option[UUID] = None,
@Column(name = "created_on") override val createdOn: Option[Date] = None,
@Column(name = "modified_on") override val modifiedOn: Option[Date] = None,
@Column(name = "name") name: Option[String] = None,
@Column(name = "is_paid_account") isPaidAccount: Boolean = false) extends IdBaseEntity[UUID](id, createdOn, modifiedOn)
确保没有使用原始软件包。
这里有一篇关于JPA的相关文章:http://blog.fakod.eu/2010/07/14/constructor-arguments-with-jpa-annotations/
我打算使用Python函数注释来指定静态工厂方法返回值的类型。我知道这是注释所需的用例之一。 PEP 3107规定: 函数注释只不过是在编译时将任意Python表达式与函数的各个部分关联起来的一种方式。 是Python中有效的表达式,不是吗?Python不同意,或者更确切地说,找不到名字:
我想验证只有当另外两个输入为空时才需要输入。所以我使用required_without_all验证规则。 根据Laravel 5.4文件要求,无需所有: 只有当所有其他指定字段都不存在时,验证中的字段才必须存在且不为空。 然而,我认为我不知道现在是什么意思,因为我认为这意味着输入必须被填充。 当我在用户名为空的情况下运行测试时,无论firstname和lastname输入是否为空,它都会返回以下错
有25种类型的空白。在下面的代码中显示,25种类型中有4种在Java中不被视为空白。为什么? 参考-https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/character.html#IsWhitespace(char)
定义参数化类时,只能使用固定数量的参数。 但是,如果你想创建一个包含多个值的地图。必须使用映射
对于这个程序,它要求用户输入他们的全名。然后,它通过在名字和姓氏之间的空格处将它们分开来排序名字和姓氏。但是,indexOf()无法识别空格并且只返回-1。为什么?谢谢。 以下是PracticeIt的提示: 编写一个名为process Name的方法,该方法接受控制台的Scanner作为参数,并提示用户输入他或她的全名,然后以相反的顺序打印名称(即姓氏、名字)。您可以假设只会给出名字和姓氏。您应该
我在 JAVA 中创建了一个矩阵类,它由一个带有行变量和列变量的 2D int 数组组成。该类的构造函数生成一个维度为 n x m 的矩阵,我还实现了两个打印矩阵值及其转置的方法()。 但是,我想创建一个函数,它接受一个矩阵作为输入并返回它的转置,但是由于这个类不是一个数组,如果我正确理解IntelliJ返回给我的异常(“java: array required,but Matrix found”