Wrong invalidValue using Hibernate ScriptAssert












0















I created a Spring Boot, DATA Rest, Hibernate application.



I added to my bean a @ScriptAssert and it works fine but unfortunately differently from other validators it return an object as invalid value.



This is my bean:



public class DocumentRow extends AbstractEntity {
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Document document;

@JsonDeserialize(using = ProductUriDeserializer.class)
@Any(fetch = FetchType.EAGER, metaDef = "ProductDocumentRowDef", metaColumn = @Column(name = "productGroup"), optional = true)
@AnyMetaDef(name = "ProductDocumentRowDef", metaType = "string", idType = "long", metaValues = {@MetaValue(value = "OL", targetEntity = OphthalmicLens.class),
@MetaValue(value = "F", targetEntity = Frame.class), @MetaValue(value = "CL", targetEntity = ContactLens.class)})
@JoinColumn(name = "product_id")
private Product product;

// The description of the product/note
@Size(max = 255)
@NotBlank
@Column(nullable = false)
private String description;

// Reference to another document row (order/ddt/)

@NotNull
@Min(1)
@Column(nullable = false)
private int qty = 1;

// taxable amount (without taxes)
@NotNull // @Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal unitPrice = BigDecimal.ZERO;

// discount on taxable amount
@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal percentageDiscount = BigDecimal.ZERO;

// (unit price * qty) - percentageDiscount% on that amount
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal amount = BigDecimal.ZERO;

@JsonDeserialize(using = TaxRateUriDeserializer.class)
@ManyToOne(fetch = FetchType.EAGER, optional = true)
private TaxRate taxRate;

// The total amount of taxes on taxable amount (unit price - percentageDiscount%) * qty)
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal taxAmount = BigDecimal.ZERO;

// Total amount (amount+taxAmount)
@Formula(value = "amount+taxAmount")
private BigDecimal totalAmount;

//says if the row is a note
@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean note = false;


and this is TaxRate:



public class TaxRate extends AbstractEntity {

@NotBlank
@Column(nullable = false)
private String name;

@NotBlank
@Column(nullable = false, unique = true)
private String code;

@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal rate;

@Enumerated(EnumType.STRING)
private TaxType type;

@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean preset = false;


This is the @ScriptAssert:



@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")


and this is the response I got from my rest controller:



{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}


How you can see the invalidValue is DocumentRow itself, instead it should be TaxRate.
How can I customize the invalidValue returned from ScriptAssert?










share|improve this question























  • Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.

    – Guillaume Smet
    Nov 23 '18 at 12:27
















0















I created a Spring Boot, DATA Rest, Hibernate application.



I added to my bean a @ScriptAssert and it works fine but unfortunately differently from other validators it return an object as invalid value.



This is my bean:



public class DocumentRow extends AbstractEntity {
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Document document;

@JsonDeserialize(using = ProductUriDeserializer.class)
@Any(fetch = FetchType.EAGER, metaDef = "ProductDocumentRowDef", metaColumn = @Column(name = "productGroup"), optional = true)
@AnyMetaDef(name = "ProductDocumentRowDef", metaType = "string", idType = "long", metaValues = {@MetaValue(value = "OL", targetEntity = OphthalmicLens.class),
@MetaValue(value = "F", targetEntity = Frame.class), @MetaValue(value = "CL", targetEntity = ContactLens.class)})
@JoinColumn(name = "product_id")
private Product product;

// The description of the product/note
@Size(max = 255)
@NotBlank
@Column(nullable = false)
private String description;

// Reference to another document row (order/ddt/)

@NotNull
@Min(1)
@Column(nullable = false)
private int qty = 1;

// taxable amount (without taxes)
@NotNull // @Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal unitPrice = BigDecimal.ZERO;

// discount on taxable amount
@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal percentageDiscount = BigDecimal.ZERO;

// (unit price * qty) - percentageDiscount% on that amount
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal amount = BigDecimal.ZERO;

@JsonDeserialize(using = TaxRateUriDeserializer.class)
@ManyToOne(fetch = FetchType.EAGER, optional = true)
private TaxRate taxRate;

// The total amount of taxes on taxable amount (unit price - percentageDiscount%) * qty)
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal taxAmount = BigDecimal.ZERO;

// Total amount (amount+taxAmount)
@Formula(value = "amount+taxAmount")
private BigDecimal totalAmount;

//says if the row is a note
@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean note = false;


and this is TaxRate:



public class TaxRate extends AbstractEntity {

@NotBlank
@Column(nullable = false)
private String name;

@NotBlank
@Column(nullable = false, unique = true)
private String code;

@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal rate;

@Enumerated(EnumType.STRING)
private TaxType type;

@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean preset = false;


This is the @ScriptAssert:



@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")


and this is the response I got from my rest controller:



{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}


How you can see the invalidValue is DocumentRow itself, instead it should be TaxRate.
How can I customize the invalidValue returned from ScriptAssert?










share|improve this question























  • Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.

    – Guillaume Smet
    Nov 23 '18 at 12:27














0












0








0








I created a Spring Boot, DATA Rest, Hibernate application.



I added to my bean a @ScriptAssert and it works fine but unfortunately differently from other validators it return an object as invalid value.



This is my bean:



public class DocumentRow extends AbstractEntity {
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Document document;

@JsonDeserialize(using = ProductUriDeserializer.class)
@Any(fetch = FetchType.EAGER, metaDef = "ProductDocumentRowDef", metaColumn = @Column(name = "productGroup"), optional = true)
@AnyMetaDef(name = "ProductDocumentRowDef", metaType = "string", idType = "long", metaValues = {@MetaValue(value = "OL", targetEntity = OphthalmicLens.class),
@MetaValue(value = "F", targetEntity = Frame.class), @MetaValue(value = "CL", targetEntity = ContactLens.class)})
@JoinColumn(name = "product_id")
private Product product;

// The description of the product/note
@Size(max = 255)
@NotBlank
@Column(nullable = false)
private String description;

// Reference to another document row (order/ddt/)

@NotNull
@Min(1)
@Column(nullable = false)
private int qty = 1;

// taxable amount (without taxes)
@NotNull // @Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal unitPrice = BigDecimal.ZERO;

// discount on taxable amount
@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal percentageDiscount = BigDecimal.ZERO;

// (unit price * qty) - percentageDiscount% on that amount
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal amount = BigDecimal.ZERO;

@JsonDeserialize(using = TaxRateUriDeserializer.class)
@ManyToOne(fetch = FetchType.EAGER, optional = true)
private TaxRate taxRate;

// The total amount of taxes on taxable amount (unit price - percentageDiscount%) * qty)
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal taxAmount = BigDecimal.ZERO;

// Total amount (amount+taxAmount)
@Formula(value = "amount+taxAmount")
private BigDecimal totalAmount;

//says if the row is a note
@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean note = false;


and this is TaxRate:



public class TaxRate extends AbstractEntity {

@NotBlank
@Column(nullable = false)
private String name;

@NotBlank
@Column(nullable = false, unique = true)
private String code;

@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal rate;

@Enumerated(EnumType.STRING)
private TaxType type;

@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean preset = false;


This is the @ScriptAssert:



@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")


and this is the response I got from my rest controller:



{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}


How you can see the invalidValue is DocumentRow itself, instead it should be TaxRate.
How can I customize the invalidValue returned from ScriptAssert?










share|improve this question














I created a Spring Boot, DATA Rest, Hibernate application.



I added to my bean a @ScriptAssert and it works fine but unfortunately differently from other validators it return an object as invalid value.



This is my bean:



public class DocumentRow extends AbstractEntity {
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Document document;

@JsonDeserialize(using = ProductUriDeserializer.class)
@Any(fetch = FetchType.EAGER, metaDef = "ProductDocumentRowDef", metaColumn = @Column(name = "productGroup"), optional = true)
@AnyMetaDef(name = "ProductDocumentRowDef", metaType = "string", idType = "long", metaValues = {@MetaValue(value = "OL", targetEntity = OphthalmicLens.class),
@MetaValue(value = "F", targetEntity = Frame.class), @MetaValue(value = "CL", targetEntity = ContactLens.class)})
@JoinColumn(name = "product_id")
private Product product;

// The description of the product/note
@Size(max = 255)
@NotBlank
@Column(nullable = false)
private String description;

// Reference to another document row (order/ddt/)

@NotNull
@Min(1)
@Column(nullable = false)
private int qty = 1;

// taxable amount (without taxes)
@NotNull // @Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal unitPrice = BigDecimal.ZERO;

// discount on taxable amount
@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal percentageDiscount = BigDecimal.ZERO;

// (unit price * qty) - percentageDiscount% on that amount
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal amount = BigDecimal.ZERO;

@JsonDeserialize(using = TaxRateUriDeserializer.class)
@ManyToOne(fetch = FetchType.EAGER, optional = true)
private TaxRate taxRate;

// The total amount of taxes on taxable amount (unit price - percentageDiscount%) * qty)
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal taxAmount = BigDecimal.ZERO;

// Total amount (amount+taxAmount)
@Formula(value = "amount+taxAmount")
private BigDecimal totalAmount;

//says if the row is a note
@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean note = false;


and this is TaxRate:



public class TaxRate extends AbstractEntity {

@NotBlank
@Column(nullable = false)
private String name;

@NotBlank
@Column(nullable = false, unique = true)
private String code;

@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal rate;

@Enumerated(EnumType.STRING)
private TaxType type;

@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean preset = false;


This is the @ScriptAssert:



@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")


and this is the response I got from my rest controller:



{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}


How you can see the invalidValue is DocumentRow itself, instead it should be TaxRate.
How can I customize the invalidValue returned from ScriptAssert?







java spring hibernate hibernate-validator






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 23 '18 at 11:53









drendadrenda

1,65422660




1,65422660













  • Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.

    – Guillaume Smet
    Nov 23 '18 at 12:27



















  • Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.

    – Guillaume Smet
    Nov 23 '18 at 12:27

















Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.

– Guillaume Smet
Nov 23 '18 at 12:27





Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.

– Guillaume Smet
Nov 23 '18 at 12:27












0






active

oldest

votes












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446233%2fwrong-invalidvalue-using-hibernate-scriptassert%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446233%2fwrong-invalidvalue-using-hibernate-scriptassert%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Tangent Lines Diagram Along Smooth Curve

Yusuf al-Mu'taman ibn Hud

Zucchini