medusajs/medusa · error · Error
Cannot set value ${value} for ${columnName}.
Error message
Cannot set value ${value} for ${columnName}. What it means
A mikro-orm property decorator for BigNumber-typed columns. When constructing BigNumber from the incoming value throws (unparseable string, NaN, invalid object), the catch rethrows with the offending value and column name.
Source
Thrown at packages/core/utils/src/dal/mikro-orm/big-number-field.ts:58
this.__helper.__data[columnName] = undefined
this.__helper.__data[rawColumnName] = undefined
this[rawColumnName] = undefined
} else {
let bigNumber: BigNumber
try {
if (value instanceof BigNumber) {
bigNumber = value
} else if (this[rawColumnName]) {
const precision = this[rawColumnName].precision
bigNumber = new BigNumber(value, {
precision,
})
} else {
bigNumber = new BigNumber(value)
}
} catch (e) {
throw new Error(`Cannot set value ${value} for ${columnName}.`)
}
const raw = bigNumber.raw!
raw.value = trimZeros(raw.value as string)
// Note: this.__helper isn't present when directly working with the entity
// Adding this in optionally for it not to break.
if (isDefined(this.__helper)) {
this.__helper.__data[columnName] = bigNumber.numeric
this.__helper.__data[rawColumnName] = raw
}
this[rawColumnName] = raw
}
}
// Note: this.__helper isn't present when directly working with the entity
// Adding this in optionally for it not to break.View on GitHub (pinned to 5e06e544a2)
Solutions
- Sanitize numeric strings before assignment (strip commas/symbols, validate with a regex)
- Coerce to number and check Number.isFinite before setting the field
- Fix the data producer to send plain numbers or plain numeric strings
Example fix
// before
variant.prices.push({ amount: "1.299,00", currency_code: "eur" })
// after
const amount = Number(priceRaw.replace(/[^0-9.-]/g, ""))
if (!Number.isFinite(amount)) throw new Error(`Bad price: ${priceRaw}`)
variant.prices.push({ amount, currency_code: "eur" }) Defensive patterns
Strategy: validation
Validate before calling
const n = typeof v === 'number' ? v : Number(String(v).replace(/[^0-9.\-]/g, ''))
if (!Number.isFinite(n)) throw new Error(`non-numeric amount: ${v}`) Type guard
const isFiniteNumber = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v)
Try / catch
try { await manager.persistAndFlush(entity) } catch (e) { if (/Cannot set value/.test(e.message)) sanitize the offending field and retry once; else throw e } Prevention
- Strip locale separators from imported numeric strings
- Assert Number.isFinite on computed prices before assignment
When it happens
Trigger: Assigning a string like "12,00" or "abc" to a raw_amount/money field, or NaN from a computed price, when persisting entities via upsert/upsertWithReplace in product/order/pricing modules.
Common situations: CSV/product imports with locale-formatted numbers, JSON payloads using strings with currency symbols, or arithmetic producing NaN before assignment.
Related errors
- Nonexistent relations were passed during upsert: ${nonexiste
- --paths must be a directory - ${additionalPath}
- --base must be a file - ${baseFile}
- insufficient_inventory
- not_found
AI-assisted analysis of medusajs/medusa@5e06e544a2 (2026-08-27).
Data as JSON: /api/errors/ce053e606132a92c.
Report an issue: GitHub.