J'ai un haricot Java. Maintenant, je veux être sûr que le champ doit être unique . J'utilise le code suivant:
@UniqueConstraint(columnNames={"username"})
public String username;
Mais je reçois une erreur:
@UniqueConstraint is dissallowed for this location
Quelle est la bonne façon d'utiliser des contraintes uniques?
Note: / J'utilise un cadre de jeu.
Pour vous assurer qu'une valeur de champ est unique, vous pouvez écrire
@Column(unique=true)
String username;
L'annotation @UniqueConstraint permet d'annoter plusieurs clés uniques au niveau de la table. C'est pourquoi vous obtenez une erreur lors de son application à un champ.
Références (JPA TopLink):
Vous pouvez utiliser au niveau de la classe avec la syntaxe suivante
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
@Column(name = "username")
public String username;
}
J'utilise également le cadre de jeu avec les annotations Hibernate et JPA 2.0 et ce modèle fonctionne sans problème.
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames = {"id_1" , "id_2"})})
public class class_name {
@Id
@GeneratedValue
public Long id;
@NotNull
public Long id_1;
@NotNull
public Long id_2;
}
J'espère que ça a aidé.
Remarque: Dans Kotlin, la syntaxe de déclaration des tableaux dans les annotations utilise arrayOf(...)
au lieu de {...}
@Entity
@Table(uniqueConstraints=arrayOf(UniqueConstraint(columnNames=arrayOf("book", "chapter_number"))))
class Chapter(@ManyToOne var book:Book,
@Column var chapterNumber:Int)
Remarque: À partir de Kotlin 1.2, il est possible d'utiliser la syntaxe [...]
afin que le code devienne beaucoup plus simple.
@Entity
@Table(uniqueConstraints=[UniqueConstraint(columnNames=["book", "chapter_number"])])
class Chapter(@ManyToOne var book:Book,
@Column var chapterNumber:Int)
@Entity
@Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames = "column1"),@UniqueConstraint(columnNames = "column2")})
- Ici, Colonne1 et Colonne2 agissent séparément comme des contraintes uniques . Ex: si jamais la valeur de column1 ou column2 correspond, vous obtiendrez une erreur UNIQUE_CONSTRAINT.
@Entity
@Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames ={"column1","column2"})})
- Ici, les valeurs combinées de column1 et de column2 agissent comme des contraintes uniques.
@Entity @Table(name = "stock", catalog = "mkyongdb",
uniqueConstraints = @UniqueConstraint(columnNames =
"STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
class Stock implements Java.io.Serializable {
}
Contraintes uniques utilisées uniquement pour créer une clé composite, qui sera unique.Il représentera la table comme clé primaire combinée comme unique
vous pouvez utiliser @UniqueConstraint au niveau classe, pour la clé primaire combinée dans une table. par exemple:
@Entity
@Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = {
@UniqueConstraint(columnNames = {"PRODUCT_ID"}) })
classe publique ProductAttribute {}
Les annotations uniques doivent être placées juste au-dessus de la déclaration d'attribut . UniqueContraints est placé dans l'annotation @Table au-dessus de la déclaration de classe de données. Voir ci-dessous:
@Entity
@Table(uniqueConstraints= arrayOf(UniqueConstraint(columnNames = arrayOf("col_1", "col_2"))))
data class Action(
@Id @GeneratedValue @Column(unique = true)
val id: Long?,
val col_1: Long?,
val col_2: Long?,
)